Empty file support (rt.cpan ticket #25392)
Ash Berlin [Fri, 23 Mar 2007 14:23:10 +0000 (14:23 +0000)]
lib/HTTP/Body/Parser/MultiPart.pm
t/data/multipart/001-content.dat
t/data/multipart/001-headers.yml
t/data/multipart/001-results.yml

index 9f55747..69f2cc5 100644 (file)
@@ -189,16 +189,17 @@ 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;
index c45f909..cd96556 100644 (file)
@@ -60,4 +60,9 @@ use warnings;
 print "Hello World :)\n";
 
 \r
+------------0xKhTmLbOuNdArY\r
+Content-Disposition: form-data; name="upload3"; filename="blank.pl"\r
+Content-Type: application/octet-stream\r
+\r
+\r
 ------------0xKhTmLbOuNdArY--\r
index e2f5998..e7cac31 100644 (file)
@@ -1,4 +1,4 @@
 ---
-Content-Length: 1559
+Content-Length: 1701
 Content-Type: multipart/form-data; boundary=----------0xKhTmLbOuNdArY
 User-Agent: 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312'
index bd2e318..f7f3ee8 100644 (file)
@@ -27,3 +27,10 @@ upload:
       Content-Type: application/octet-stream
     name: upload2
     size: 71
+  upload3:
+    filename: blank.pl
+    headers:
+      Content-Disposition: form-data; name="upload3"; filename="blank.pl"
+      Content-Type: application/octet-stream
+    name: upload3
+    size: 0