[Catalyst-commits] r6210 - in trunk/HTTP-Body: . lib/HTTP/Body t/data/multipart

andyg at dev.catalyst.perl.org andyg at dev.catalyst.perl.org
Tue Mar 27 19:32:30 GMT 2007


Author: andyg
Date: 2007-03-27 19:32:30 +0100 (Tue, 27 Mar 2007)
New Revision: 6210

Modified:
   trunk/HTTP-Body/Changes
   trunk/HTTP-Body/META.yml
   trunk/HTTP-Body/lib/HTTP/Body/MultiPart.pm
   trunk/HTTP-Body/t/data/multipart/001-content.dat
   trunk/HTTP-Body/t/data/multipart/001-headers.yml
   trunk/HTTP-Body/t/data/multipart/001-results.yml
   trunk/HTTP-Body/t/data/multipart/002-results.yml
   trunk/HTTP-Body/t/data/multipart/003-results.yml
   trunk/HTTP-Body/t/data/multipart/004-results.yml
   trunk/HTTP-Body/t/data/multipart/005-results.yml
   trunk/HTTP-Body/t/data/multipart/006-results.yml
   trunk/HTTP-Body/t/data/multipart/007-results.yml
   trunk/HTTP-Body/t/data/multipart/008-results.yml
   trunk/HTTP-Body/t/data/multipart/009-results.yml
   trunk/HTTP-Body/t/data/multipart/010-results.yml
   trunk/HTTP-Body/t/data/multipart/011-results.yml
Log:
HTTP::Body 0.9, patches from Ton Voon to fix empty fields on multipart/form-data and filenames of '0'

Modified: trunk/HTTP-Body/Changes
===================================================================
--- trunk/HTTP-Body/Changes	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/Changes	2007-03-27 18:32:30 UTC (rev 6210)
@@ -1,18 +1,23 @@
 This file documents the revision history for Perl extension HTTP::Body.
 
-0.9
-        - Small performance tweaks to urlencoded parser.
+0.9   2007-03-27 14:00:00
+        - Fixed bug where empty fields in multipart/form-data were ignored.
+          (Ton Voon)
+        - Fixed bug where an uploaded file with the name "0" was ignored.
+          (Ton Voon)
+        - Small performance improvements to urlencoded parser.
 
 0.8   2007-03-23 18:40:00
-        - Some browsers such as MSIE send extra data after the body content.  We now
-          properly ignore anything beyond Content-Length.
+        - Some browsers such as MSIE send extra data after the body content.
+          We now properly ignore anything beyond Content-Length.
 
 0.7   2007-03-23 10:00:00
         - Fixed parsing an empty (zero-length) file using multipart.
           http://rt.cpan.org/NoAuth/Bug.html?id=25392
 
 0.6   2006-01-06 00:00:00
-        - Fixed buffer bug in OctetStream, reported by Daisuke Murase <typester at cpan.org>.
+        - Fixed buffer bug in OctetStream, reported by Daisuke Murase
+          <typester at cpan.org>.
         - Fixed YAML prereq, reported by Jess Robinson
         - Added tests, Ben Trott <ben at sixapart.com>.
 

Modified: trunk/HTTP-Body/META.yml
===================================================================
--- trunk/HTTP-Body/META.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/META.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -1,7 +1,7 @@
 # http://module-build.sourceforge.net/META-spec.html
 #XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
 name:         HTTP-Body
-version:      0.8
+version:      0.9
 version_from: lib/HTTP/Body.pm
 installdirs:  site
 requires:

Modified: trunk/HTTP-Body/lib/HTTP/Body/MultiPart.pm
===================================================================
--- trunk/HTTP-Body/lib/HTTP/Body/MultiPart.pm	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/lib/HTTP/Body/MultiPart.pm	2007-03-27 18:32:30 UTC (rev 6210)
@@ -89,7 +89,7 @@
 
 =cut
 
-sub crlf {
+sub crlf () {
     return "\x0d\x0a";
 }
 
@@ -257,45 +257,42 @@
 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 && !$filename) {
-        return 0;
-    }
-
     unless ( exists $part->{name} ) {
 
+        my $disposition = $part->{headers}->{'Content-Disposition'};
+        my ($name)      = $disposition =~ / name="?([^\";]+)"?/;
+        my ($filename)  = $disposition =~ / filename="?([^\"]*)"?/;
+        # Need to match empty filenames above, so this part is flagged as an upload type
 
-        $part->{name}     = $name;
-        $part->{filename} = $filename;
+        $part->{name} = $name;
 
-        if ($filename) {
+        if ( defined $filename ) {
+            $part->{filename} = $filename;
 
-            my $fh = File::Temp->new( UNLINK => 0 );
+            if ( $filename ne "" ) {
+                my $fh = File::Temp->new( UNLINK => 0 );
 
-            $part->{fh}       = $fh;
-            $part->{tempname} = $fh->filename;
+                $part->{fh}       = $fh;
+                $part->{tempname} = $fh->filename;
+	        }
         }
     }
 
-    if ( $part->{filename} && ( my $length = length( $part->{data} ) ) ) {
+    if ( $part->{fh} && ( my $length = length( $part->{data} ) ) ) {
         $part->{fh}->write( substr( $part->{data}, 0, $length, '' ), $length );
     }
 
     if ( $part->{done} ) {
 
-        if ( $part->{filename} ) {
+        if ( exists $part->{filename} ) {
+	        if ( $part->{filename} ne "" ) {
+                $part->{fh}->close;
 
-            $part->{fh}->close;
+                delete @{$part}{qw[ data done fh ]};
 
-            delete @{$part}{qw[ data done fh ]};
-
-            $self->upload( $part->{name}, $part );
+                $self->upload( $part->{name}, $part );
+            }
         }
-
         else {
             $self->param( $part->{name}, $part->{data} );
         }

Modified: trunk/HTTP-Body/t/data/multipart/001-content.dat
===================================================================
--- trunk/HTTP-Body/t/data/multipart/001-content.dat	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/001-content.dat	2007-03-27 18:32:30 UTC (rev 6210)
@@ -24,26 +24,26 @@
 Content-Disposition: form-data; name="upload"; filename="hello.pl"
 Content-Type: application/octet-stream
 
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-print "Hello World :)\n";
-
+#!/usr/bin/perl
 
+use strict;
+use warnings;
+
+print "Hello World :)\n";
+
+
 ------------0xKhTmLbOuNdArY
 Content-Disposition: form-data; name="upload"; filename="hello.pl"
 Content-Type: application/octet-stream
 
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-print "Hello World :)\n";
-
+#!/usr/bin/perl
 
+use strict;
+use warnings;
+
+print "Hello World :)\n";
+
+
 ------------0xKhTmLbOuNdArY
 Content-Disposition: form-data; name="upload1"; filename=""
 
@@ -52,17 +52,21 @@
 Content-Disposition: form-data; name="upload2"; filename="hello.pl"
 Content-Type: application/octet-stream
 
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-
-print "Hello World :)\n";
-
+#!/usr/bin/perl
 
+use strict;
+use warnings;
+
+print "Hello World :)\n";
+
+
 ------------0xKhTmLbOuNdArY
 Content-Disposition: form-data; name="upload3"; filename="blank.pl"
 Content-Type: application/octet-stream
 
 
+------------0xKhTmLbOuNdArY
+Content-Disposition: form-data; name="upload4"; filename="0"
+
+
 ------------0xKhTmLbOuNdArY--

Modified: trunk/HTTP-Body/t/data/multipart/001-headers.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/001-headers.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/001-headers.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -1,4 +1,4 @@
 ---
-Content-Length: 1701
+Content-Length: 1817
 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'

Modified: trunk/HTTP-Body/t/data/multipart/001-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/001-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/001-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:
@@ -13,20 +14,20 @@
         Content-Disposition: form-data; name="upload"; filename="hello.pl"
         Content-Type: application/octet-stream
       name: upload
-      size: 71
+      size: 78
     - filename: hello.pl
       headers:
         Content-Disposition: form-data; name="upload"; filename="hello.pl"
         Content-Type: application/octet-stream
       name: upload
-      size: 71
+      size: 78
   upload2:
     filename: hello.pl
     headers:
       Content-Disposition: form-data; name="upload2"; filename="hello.pl"
       Content-Type: application/octet-stream
     name: upload2
-    size: 71
+    size: 78
   upload3:
     filename: blank.pl
     headers:
@@ -34,3 +35,9 @@
       Content-Type: application/octet-stream
     name: upload3
     size: 0
+  upload4:
+    filename: 0
+    headers:
+      Content-Disposition: form-data; name="upload4"; filename="0"
+    name: upload4
+    size: 0

Modified: trunk/HTTP-Body/t/data/multipart/002-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/002-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/002-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa.\r\n"
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/003-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/003-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/003-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\n\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/004-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/004-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/004-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/005-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/005-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/005-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/006-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/006-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/006-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/007-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/007-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/007-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/008-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/008-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/008-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/009-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/009-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/009-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/010-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/010-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/010-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:

Modified: trunk/HTTP-Body/t/data/multipart/011-results.yml
===================================================================
--- trunk/HTTP-Body/t/data/multipart/011-results.yml	2007-03-27 17:57:58 UTC (rev 6209)
+++ trunk/HTTP-Body/t/data/multipart/011-results.yml	2007-03-27 18:32:30 UTC (rev 6210)
@@ -5,6 +5,7 @@
     - A
     - B
   text1: Ratione accusamus aspernatur aliquam
+  text2: ""
   textarea: "Voluptatem cumque voluptate sit recusandae at. Et quas facere rerum unde esse. Sit est et voluptatem. Vel temporibus velit neque odio non.\r\n\r\nMolestias rerum ut sapiente facere repellendus illo. Eum nulla quis aut. Quidem voluptas vitae ipsam officia voluptatibus eveniet. Aspernatur cupiditate ratione aliquam quidem corrupti. Eos sunt rerum non optio culpa."
 upload:
   upload:




More information about the Catalyst-commits mailing list