From: Tomas Doran Date: Tue, 13 Apr 2010 22:06:19 +0000 (+0000) Subject: Fix RT#41442 so that temporary files are always, always cleaned up. X-Git-Tag: 5.80023~19 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=671123ba662cd4d38ee2590baad2b9f46947cb4e;hp=6356febf43d63d59631124c80b39f89308d92f55 Fix RT#41442 so that temporary files are always, always cleaned up. --- diff --git a/Changes b/Changes index b8ed095..c43f463 100644 --- a/Changes +++ b/Changes @@ -4,6 +4,9 @@ - Additional fix for getting the base application path right when rewriting requests into an application sub path with mod_alias and mod_rewrite on Apache. + - Ensure to always cleanup temporary uploaded files in all cases, even + when exceptions occur during request processing, using HTTP::Body's + ->cleanup feature. (RT#41442) New features: - Setting __PACKAGE__->config(enable_catalyst_header => 1); in your MyApp.pm diff --git a/Makefile.PL b/Makefile.PL index 9d34bc3..c71fa40 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -27,7 +27,7 @@ requires 'Class::C3::Adopt::NEXT' => '0.07'; requires 'CGI::Simple::Cookie' => '1.109'; requires 'Data::Dump'; requires 'HTML::Entities'; -requires 'HTTP::Body' => '1.04'; # makes uploadtmp work +requires 'HTTP::Body' => '1.06'; # ->cleanup(1) requires 'HTTP::Headers' => '1.64'; requires 'HTTP::Request' => '5.814'; requires 'HTTP::Response' => '5.813'; diff --git a/lib/Catalyst/Engine.pm b/lib/Catalyst/Engine.pm index 69563d9..509585f 100644 --- a/lib/Catalyst/Engine.pm +++ b/lib/Catalyst/Engine.pm @@ -311,6 +311,8 @@ Clean up after uploads, deleting temp files. sub finalize_uploads { my ( $self, $c ) = @_; + # N.B. This code is theoretically entirely unneeded due to ->cleanup(1) + # on the HTTP::Body object. my $request = $c->request; foreach my $key (keys %{ $request->uploads }) { my $upload = $request->uploads->{$key}; @@ -335,6 +337,7 @@ sub prepare_body { unless ( $request->_body ) { my $type = $request->header('Content-Type'); $request->_body(HTTP::Body->new( $type, $length )); + $request->_body->cleanup(1); # Make extra sure! $request->_body->tmpdir( $appclass->config->{uploadtmp} ) if exists $appclass->config->{uploadtmp}; }