]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 677187: If the attachment filename contains a newline, an error is thrown when...
authorFrédéric Buclin <LpSolit@gmail.com>
Tue, 9 Aug 2011 23:46:03 +0000 (01:46 +0200)
committerFrédéric Buclin <LpSolit@gmail.com>
Tue, 9 Aug 2011 23:46:03 +0000 (01:46 +0200)
r/a=mkanat

Bugzilla/Attachment.pm
template/en/default/global/user-error.html.tmpl

index 7cd350ddee0f1793e46d9303b1f988020163b798..a39dc3af413959e52b373e1f40f402850d3253f7 100644 (file)
@@ -518,9 +518,13 @@ sub _check_content_type {
  
     my $is_patch = ref($invocant) ? $invocant->ispatch : $params->{ispatch};
     $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);
-    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 });
     }
     trick_taint($content_type);
@@ -560,7 +564,7 @@ sub _check_description {
 sub _check_filename {
     my ($invocant, $filename) = @_;
 
-    $filename = trim($filename);
+    $filename = clean_text($filename);
     $filename || ThrowUserError('file_not_specified');
 
     # Remove path info (if any) from the file name.  The browser should do this
index af2fc7b3600b9bdf94337ea5486b441320ce0ca2..5af39dc80164778ad433b3955726fb270fd6ab2c 100644 (file)
     [% title = "Invalid Content-Type" %]
     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>
-    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" %]
     [% title = "Invalid Context" %]
     The context [% context FILTER html %] is invalid (must be a number,