X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst.pm;h=dc56b884a0d5de88ab054471ffe0f02eb91600e6;hp=7b56a600decd943a8c4e2706f480d43f9c547ea9;hb=8f62c91addd1c43b8639b2a11b0eb007d9834f46;hpb=29f5acef992a393dcbd64bdc451047d9102eff94 diff --git a/lib/Catalyst.pm b/lib/Catalyst.pm index 7b56a60..dc56b88 100644 --- a/lib/Catalyst.pm +++ b/lib/Catalyst.pm @@ -10,6 +10,7 @@ use Catalyst::Request; use Catalyst::Request::Upload; use Catalyst::Response; use Catalyst::Utils; +use File::stat; use NEXT; use Text::SimpleTable; use Path::Class; @@ -1015,7 +1016,20 @@ sub finalize_headers { # Content-Length if ( $c->response->body && !$c->response->content_length ) { - $c->response->content_length( bytes::length( $c->response->body ) ); + # get the length from a filehandle + if ( ref $c->response->body && $c->response->body->can('read') ) { + if ( my $stat = stat $c->response->body ) { + $c->response->content_length( $stat->size ); + } + else { + $c->log->warn( + 'Serving filehandle without a content-length' ); + } + } + else { + $c->response->content_length( + bytes::length( $c->response->body ) ); + } } # Errors