patch for 1.10
[catagits/HTTP-Body.git] / lib / HTTP / Body / MultiPart.pm
index b5860f1..0296171 100644 (file)
@@ -6,6 +6,7 @@ use bytes;
 
 use IO::File;
 use File::Temp 0.14;
+use File::Spec;
 
 =head1 NAME
 
@@ -30,7 +31,7 @@ HTTP Body Multipart Parser.
 sub init {
     my $self = shift;
 
-    unless ( $self->content_type =~ /boundary=\"?([^\";,]+)\"?/ ) {
+    unless ( $self->content_type =~ /boundary=\"?([^\";]+)\"?/ ) {
         my $content_type = $self->content_type;
         Carp::croak("Invalid boundary in content_type: '$content_type'");
     }
@@ -270,11 +271,14 @@ sub handler {
             $part->{filename} = $filename;
 
             if ( $filename ne "" ) {
-                my $fh = File::Temp->new( UNLINK => 0 );
+                my $basename = (File::Spec->splitpath($filename))[2];
+                my $suffix = $basename =~ /[^.]+(\.[^\\\/]+)$/ ? $1 : q{};
+
+                my $fh = File::Temp->new( UNLINK => 0, DIR => $self->tmpdir, SUFFIX => $suffix );
 
                 $part->{fh}       = $fh;
                 $part->{tempname} = $fh->filename;
-               }
+            }
         }
     }
 
@@ -285,8 +289,8 @@ sub handler {
     if ( $part->{done} ) {
 
         if ( exists $part->{filename} ) {
-               if ( $part->{filename} ne "" ) {
-                $part->{fh}->close;
+            if ( $part->{filename} ne "" ) {
+                $part->{fh}->close if defined $part->{fh};
 
                 delete @{$part}{qw[ data done fh ]};