Commit 10b07dbd authored by Frédéric Buclin's avatar Frédéric Buclin

Bug 677187: If the attachment filename contains a newline, an error is thrown…

Bug 677187: If the attachment filename contains a newline, an error is thrown when trying to download the attachment r/a=mkanat
parent 81c0c249
...@@ -518,9 +518,13 @@ sub _check_content_type { ...@@ -518,9 +518,13 @@ sub _check_content_type {
my $is_patch = ref($invocant) ? $invocant->ispatch : $params->{ispatch}; my $is_patch = ref($invocant) ? $invocant->ispatch : $params->{ispatch};
$content_type = 'text/plain' if $is_patch; $content_type = 'text/plain' if $is_patch;
$content_type = trim($content_type); $content_type = clean_text($content_type);
# The subsets below cover all existing MIME types and charsets registered by IANA.
# (MIME type: RFC 2045 section 5.1; charset: RFC 2278 section 3.3)
my $legal_types = join('|', LEGAL_CONTENT_TYPES); my $legal_types = join('|', LEGAL_CONTENT_TYPES);
if (!$content_type or $content_type !~ /^($legal_types)\/.+$/) { if (!$content_type
|| $content_type !~ /^($legal_types)\/[a-z0-9_\-\+\.]+(;\s*charset=[a-z0-9_\-\+]+)?$/i)
{
ThrowUserError("invalid_content_type", { contenttype => $content_type }); ThrowUserError("invalid_content_type", { contenttype => $content_type });
} }
trick_taint($content_type); trick_taint($content_type);
...@@ -560,7 +564,7 @@ sub _check_description { ...@@ -560,7 +564,7 @@ sub _check_description {
sub _check_filename { sub _check_filename {
my ($invocant, $filename) = @_; my ($invocant, $filename) = @_;
$filename = trim($filename); $filename = clean_text($filename);
$filename || ThrowUserError('file_not_specified'); $filename || ThrowUserError('file_not_specified');
# Remove path info (if any) from the file name. The browser should do this # Remove path info (if any) from the file name. The browser should do this
......
...@@ -927,8 +927,9 @@ ...@@ -927,8 +927,9 @@
[% title = "Invalid Content-Type" %] [% title = "Invalid Content-Type" %]
The content type <em>[% contenttype FILTER html %]</em> is invalid. The content type <em>[% contenttype FILTER html %]</em> is invalid.
Valid types must be of the form <em>foo/bar</em> where <em>foo</em> Valid types must be of the form <em>foo/bar</em> where <em>foo</em>
is one of <em>[% constants.LEGAL_CONTENT_TYPES.join(', ') FILTER html %]</em>. is one of <em>[% constants.LEGAL_CONTENT_TYPES.join(', ') FILTER html %]</em>
and <em>bar</em> must not contain any special characters (such as "=", "?", ...).
[% ELSIF error == "invalid_context" %] [% ELSIF error == "invalid_context" %]
[% title = "Invalid Context" %] [% title = "Invalid Context" %]
The context [% context FILTER html %] is invalid (must be a number, The context [% context FILTER html %] is invalid (must be a number,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment