Empty file support (rt.cpan ticket #25392)
[catagits/HTTP-Body.git] / lib / HTTP / Body / Parser / MultiPart.pm
index cce6585..69f2cc5 100644 (file)
@@ -189,23 +189,26 @@ sub parse_body {
 sub handler {
     my ( $self, $part ) = @_;
 
+    my $disposition = $part->{headers}->{'Content-Disposition'};
+    my ($name)     = $disposition =~ / name="?([^\";]+)"?/;
+    my ($filename) = $disposition =~ / filename="?([^\"]+)"?/;
+
     # skip parts without content
-    if ( $part->{done} && $part->{size} == 0 ) {
+    if ( $part->{done} && $part->{size} == 0 && !$filename) {
         return 0;
     }
 
     unless ( exists $part->{name} ) {
 
-        my $disposition = $part->{headers}->{'Content-Disposition'};
-        my ($name)     = $disposition =~ / name="?([^\";]+)"?/;
-        my ($filename) = $disposition =~ / filename="?([^\"]+)"?/;
 
         $part->{name}     = $name;
         $part->{filename} = $filename;
 
         if ($filename) {
 
-            my $fh = File::Temp->new( UNLINK => 0 );
+            my $fh = File::Temp->new( UNLINK => 0,
+                                     (defined $self->{tmpdir} ? ( DIR => $self->{tmpdir} ) : ())
+                                 );
 
             $part->{fh}       = $fh;
             $part->{tempname} = $fh->filename;