Fix RT#41442 so that temporary files are always, always cleaned up.
Tomas Doran [Tue, 13 Apr 2010 22:06:19 +0000 (22:06 +0000)]
Changes
Makefile.PL
lib/Catalyst/Engine.pm

diff --git a/Changes b/Changes
index b8ed095..c43f463 100644 (file)
--- 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
index 9d34bc3..c71fa40 100644 (file)
@@ -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';
index 69563d9..509585f 100644 (file)
@@ -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};
         }