[libhttp-entity-parser-perl] 01/03: modify disposition parser https://gist.github.com/chansen/7163968
gregor herrmann
gregoa at debian.org
Sun Oct 23 00:23:46 UTC 2016
This is an automated email from the git hooks/post-receive script.
gregoa pushed a commit to tag 0.16
in repository libhttp-entity-parser-perl.
commit 551a5265d0ad3c038861fc6ab290ca32faa83a7d
Author: Masahiro Nagano <kazeburo at gmail.com>
Date: Wed Nov 18 13:53:55 2015 +0900
modify disposition parser https://gist.github.com/chansen/7163968
---
t/01_content_type/multipart_form_data.t | 232 ++++++++++++++++++++++++++++++++
1 file changed, 232 insertions(+)
diff --git a/t/01_content_type/multipart_form_data.t b/t/01_content_type/multipart_form_data.t
new file mode 100644
index 0000000..c360aa7
--- /dev/null
+++ b/t/01_content_type/multipart_form_data.t
@@ -0,0 +1,232 @@
+use strict;
+use warnings;
+use Test::More;
+use HTTP::Entity::Parser::MultiPart;
+use Hash::MultiValue;
+use HTTP::Headers;
+use t::Util;
+use File::Basename;
+
+
+my @tests = (
+ [ q<form-data; name="foo">,
+ [ q<foo>, undef ]
+ ],
+ [ q<form-data; name="">,
+ [ q<>, undef ]
+ ],
+ [ q<form-data; name=""; filename="">,
+ [ q<>, q<> ]
+ ],
+ [ q<form-data; name="foo"; filename="">,
+ [ q<foo>, q<> ]
+ ],
+ [ q<form-data; name=""; filename="foo.ext">,
+ [ q<>, q<foo.ext> ]
+ ],
+ [ q<form-data; name="Foo"; filename="doc.ext">,
+ [ q<Foo>, q<doc.ext> ]
+ ],
+ [ q<form-data; name="foO"; filename="bar baz.ext">,
+ [ q<foO>, q<bar baz.ext> ]
+ ],
+ [ q<form-data; name="FoO"; filename="b\az.ext">,
+ [ q<FoO>, q<b\az.ext> ]
+ ],
+ [ q<form-data; name="FOO"; filename="\"quoted\" bar.ext">,
+ [ q<FOO>, q<\"quoted\" bar.ext> ]
+ ],
+ [ q<form-data; name="foo"; filename="foo;bar;baz.ext">,
+ [ q<foo>, q<foo;bar;baz.ext> ]
+ ],
+ [ q<form-data; name="foo"; filename="foo\\bar||baz\\ext">,
+ [ q<foo>, q<foo\\bar||baz\\ext> ]
+ ],
+ [ q<form-data; name="foo"; filename="'bar.ext'">,
+ [ q<foo>, q<'bar.ext'> ]
+ ],
+ [ q<form-data; filename="foo"; name="bar">,
+ [ q<bar>, q<foo> ]
+ ],
+ [ q<form-data; name="=name"; filename="=filename.ext">,
+ [ q<=name>, q<=filename.ext> ]
+ ],
+ [ q<form-data; name="foo"; filename="/path/filename.ext">,
+ [ q<foo>, q</path/filename.ext> ]
+ ],
+
+ # disposition type and parameter names are case insensitive
+ [ q<FORM-DATA; name="foo"; FiLeNaMe="bar">,
+ [ q<foo>, q<bar> ]
+ ],
+ [ q<form-data; NamE="foo">,
+ [ q<foo>, undef ]
+ ],
+
+ # unquoted parameter values
+ [ q<form-data; name=foo>,
+ [ q<foo>, undef ]
+ ],
+ [ q<form-data; name=foo; filename=>,
+ [ q<foo>, q<> ]
+ ],
+ [ q<form-data; name=foo; filename=baz.ext>,
+ [ q<foo>, q<baz.ext> ]
+ ],
+ [ q<form-data; name=foo; filename=foo-bar+baz.ext>,
+ [ q<foo>, q<foo-bar+baz.ext> ]
+ ],
+
+ # excessive LWS
+ [ q< form-data ; name = "foo" >,
+ [ q<foo>, undef ]
+ ],
+ [ q< form-data ; name = foo >,
+ [ q<foo>, undef ]
+ ],
+ [ q< form-data ; name = "foo" ; filename = "baz" >,
+ [ q<foo>, q<baz> ]
+ ],
+ [ q< form-data ; name = "foo" ; filename = >,
+ [ q<foo>, q<> ]
+ ],
+
+ # lack of LWS
+ [ q<form-data;name="foo">,
+ [ q<foo>, undef ]
+ ],
+ [ q<form-data;name=foo>,
+ [ q<foo>, undef ]
+ ],
+ [ q<form-data;name="foo";filename="baz">,
+ [ q<foo>, q<baz> ]
+ ],
+ [ q<form-data;name="foo";filename=>,
+ [ q<foo>, q<> ]
+ ],
+
+ # extension parameters are ignored
+ [ q<form-data; name="foo"; baz="foo">,
+ [ q<foo>, undef ]
+ ],
+ [ q<form-data; name="foo"; baz="foo"; baz="bar">,
+ [ q<foo>, undef ]
+ ],
+ [ q<form-data; name="foo"; filename="bar"; baz="foo"; baz="bar">,
+ [ q<foo>, q<bar> ]
+ ],
+
+ # ignore empty parameters and unknown tokens
+ [ q<form-data; name=foo; ;; baz=foo ; >,
+ [ q<foo>, undef ]
+ ],
+ [ q<form-data; name=foo; baz ; baz=foo ; >,
+ [ q<foo>, undef ]
+ ],
+
+ # Webkit based browsers percent-encode double-quote marks but does not
+ # percent-encode any percent characters or backslash characters.
+ # " Foo %22 " => %22 Foo %22 %22
+ # " \" " => %22 \%22 %22
+ [ q<form-data; name="foo"; filename="%22 Foo %22 %22">,
+ [ q<foo>, q<%22 Foo %22 %22> ]
+ ],
+ [ q<form-data; name="foo"; filename="%22 \%22 %22">,
+ [ q<foo>, q<%22 \%22 %22> ]
+ ],
+
+ # Firefox quotes double-quote marks but does not quoute any backslash
+ # characters.
+ # " Foo " => \" Foo \"
+ # " \" " => \" \\" \"
+ [ q<form-data; name="foo"; filename="\" Foo \"">,
+ [ q<foo>, q<\" Foo \"> ]
+ ],
+ [ q<form-data; name="foo"; filename="\" \\" \"">,
+ [ q<foo>, q<\" \\" \"> ]
+ ],
+
+ # IE may provide a path containing backslash characters but does not
+ # encode or quote the backslash character.
+ [ q<form-data; name="foo"; filename="C:\Documents and Settings\user\Documents\file.ext">,
+ [ q<foo>, q<C:\Documents and Settings\user\Documents\file.ext> ]
+ ],
+
+ # some old browsers does not escape double-quote marks
+ # <https://bugzilla.mozilla.org/show_bug.cgi?id=136676>
+ [ q<form-data; name=" foo " ">,
+ [ ],
+ ],
+
+ # disposition type must be form-data
+ [ q<attachment; name="foo">,
+ [ ]
+ ],
+ [ q<attachment; name="foo"; filename="baz">,
+ [ ]
+ ],
+
+ # name parameter is required
+ [ q<form-data;">,
+ [ ]
+ ],
+ [ q<form-data; filename="bar">,
+ [ ]
+ ],
+
+ # name parameter redundantly specified
+ [ q<form-data; name="foo"; name="bar"; filename="baz">,
+ [ ]
+ ],
+
+ # filename parameter redundantly specified
+ [ q<form-data; name="foo"; filename="bar"; filename="baz">,
+ [ ]
+ ],
+
+ [ q<form-data; name>,
+ [ ]
+ ]
+);
+
+
+foreach my $test (@tests) {
+ my ($disposition, $exp) = @$test;
+ my $content = qq{------BOUNDARY
+Content-Disposition: $disposition
+Content-Type: text/plain
+
+fuga
+------BOUNDARY--
+};
+ $content =~ s/\r\n/\n/g;
+ $content =~ s/\n/\r\n/g;
+ my $env = {
+ CONTENT_LENGTH => length($content),
+ CONTENT_TYPE => 'multipart/form-data; boundary=----BOUNDARY',
+ };
+
+ my ($params, $uploads) = ([],[]);
+ eval {
+ my $parser = HTTP::Entity::Parser::MultiPart->new($env);
+ $parser->add($_) for split //, $content;
+ ($params, $uploads) = $parser->finalize();
+ };
+ if ( $exp->[1] ) {
+ is_deeply($params,[], "no-params-<$disposition>");
+ is($uploads->[0], $exp->[0], "uploads-name-<$disposition>");
+ is($uploads->[1]->{filename}, $exp->[1], "uploads-filename-<$disposition>");
+ }
+ else {
+ is_deeply($uploads,[], "no-uploads-<$disposition>");
+ if (defined $exp->[0] && $disposition !~ m!filename!i ){
+ is($params->[0], $exp->[0], "params-name-<$disposition>");
+ is($params->[1], "fuga", "params-val-<$disposition>");
+ }
+ else {
+ is_deeply($params,[], "no-params2-<$disposition>");
+ }
+ }
+}
+
+done_testing();
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libhttp-entity-parser-perl.git
More information about the Pkg-perl-cvs-commits
mailing list