Skip to content

Commit

Permalink
handle quoted snowmans correctly
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Jul 3, 2014
1 parent f6d804a commit 8af37f1
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 13 deletions.
8 changes: 3 additions & 5 deletions lib/Mojo/Message.pm
Expand Up @@ -277,14 +277,12 @@ sub _parse_formdata {
my ($filename) = $disposition =~ /[; ]filename="((?:\\"|[^"])*)"/;
next if $upload && !defined $filename || !$upload && defined $filename;
my ($name) = $disposition =~ /[; ]name="((?:\\"|[^;"])*)"/;
$part = $part->asset->slurp unless $upload;

if ($charset) {
$name = decode($charset, $name) // $name if $name;
$filename = decode($charset, $filename) // $filename if $filename;
}

unless ($upload) {
$part = $part->asset->slurp;
$part = decode($charset, $part) // $part if $charset;
$part = decode($charset, $part) // $part unless $upload;
}

push @formdata, [$name, $part, $filename];
Expand Down
6 changes: 3 additions & 3 deletions lib/Mojo/UserAgent/Transactor.pm
Expand Up @@ -11,7 +11,7 @@ use Mojo::Parameters;
use Mojo::Transaction::HTTP;
use Mojo::Transaction::WebSocket;
use Mojo::URL;
use Mojo::Util 'encode';
use Mojo::Util qw(encode url_escape);

has generators => sub { {form => \&_form, json => \&_json} };
has name => 'Mojolicious (Perl)';
Expand Down Expand Up @@ -218,7 +218,7 @@ sub _multipart {
}

# Filename and headers
$filename = delete $value->{filename} // $name;
$filename = url_escape delete $value->{filename} // $name, '"';
$filename = encode $charset, $filename if $charset;
$headers->from_hash($value);
}
Expand All @@ -230,7 +230,7 @@ sub _multipart {
}

# Content-Disposition
$name = encode $charset, $name if $charset;
$name = url_escape $charset ? encode($charset, $name) : $name, '"';
my $disposition = qq{form-data; name="$name"};
$disposition .= qq{; filename="$filename"} if defined $filename;
$headers->content_disposition($disposition);
Expand Down
10 changes: 5 additions & 5 deletions t/mojo/transactor.t
Expand Up @@ -270,9 +270,9 @@ is $tx->req->upload('0')->slurp, 'whatever', 'right content';
my $snowman = encode 'UTF-8', '';
$tx = $t->tx(
POST => 'http://example.com/foo' => form => {
'' => {
'"☃"' => {
file => Mojo::Asset::Memory->new->add_chunk('snowman'),
filename => '.jpg'
filename => '"☃".jpg'
}
} => charset => 'UTF-8'
);
Expand All @@ -284,9 +284,9 @@ like $tx->req->content->parts->[0]->headers->content_disposition,
qr/$snowman/, 'right "Content-Disposition" value';
is $tx->req->content->parts->[0]->asset->slurp, 'snowman', 'right part';
is $tx->req->content->parts->[1], undef, 'no more parts';
is $tx->req->upload('')->filename, '.jpg', 'right filename';
is $tx->req->upload('')->size, 7, 'right size';
is $tx->req->upload('')->slurp, 'snowman', 'right content';
is $tx->req->upload('%22☃%22')->filename, '%22☃%22.jpg', 'right filename';
is $tx->req->upload('%22☃%22')->size, 7, 'right size';
is $tx->req->upload('%22☃%22')->slurp, 'snowman', 'right content';

# Multipart form with multiple uploads sharing the same name
$tx = $t->tx(
Expand Down

0 comments on commit 8af37f1

Please sign in to comment.