]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Add a blanket try/except when parsing multipart form bodies.
authorBen Darnell <ben@bendarnell.com>
Sun, 18 Jan 2015 17:07:54 +0000 (12:07 -0500)
committerBen Darnell <ben@bendarnell.com>
Sun, 18 Jan 2015 17:07:54 +0000 (12:07 -0500)
This mirrors the behavior for form-urlencoded bodies, as well as the
handling of selected errors in parse_multipart_form_data.

Closes #1267.

tornado/httputil.py

index cd8dcd5455973bc3097174118c5a3be2cba4fdf4..9c99b3efa8ec820669dc7198825d295b693ce578 100644 (file)
@@ -696,14 +696,17 @@ def parse_body_arguments(content_type, body, arguments, files, headers=None):
             if values:
                 arguments.setdefault(name, []).extend(values)
     elif content_type.startswith("multipart/form-data"):
-        fields = content_type.split(";")
-        for field in fields:
-            k, sep, v = field.strip().partition("=")
-            if k == "boundary" and v:
-                parse_multipart_form_data(utf8(v), body, arguments, files)
-                break
-        else:
-            gen_log.warning("Invalid multipart/form-data")
+        try:
+            fields = content_type.split(";")
+            for field in fields:
+                k, sep, v = field.strip().partition("=")
+                if k == "boundary" and v:
+                    parse_multipart_form_data(utf8(v), body, arguments, files)
+                    break
+            else:
+                raise ValueError("multipart boundary not found")
+        except Exception as e:
+            gen_log.warning("Invalid multipart/form-data: %s", e)
 
 
 def parse_multipart_form_data(boundary, data, arguments, files):