made field name mandatory in multipart/form-data headers

A field name in the Content-Disposition header is required by the multipart/form-data spec. If one field/part does not have it, it will be omitted from the request. When this happens, we log it to DEBUG.
This commit is contained in:
Dirk Guijt 2018-02-02 09:43:42 +01:00
parent 27108334f1
commit 5c341a2b00

View File

@ -18,7 +18,7 @@ except ImportError:
json_loads = json.loads json_loads = json.loads
from sanic.exceptions import InvalidUsage from sanic.exceptions import InvalidUsage
from sanic.log import error_logger from sanic.log import error_logger, logger
DEFAULT_HTTP_CONTENT_TYPE = "application/octet-stream" DEFAULT_HTTP_CONTENT_TYPE = "application/octet-stream"
@ -309,18 +309,21 @@ def parse_multipart_form(body, boundary):
content_type = form_header_value content_type = form_header_value
content_charset = form_parameters.get('charset', 'utf-8') content_charset = form_parameters.get('charset', 'utf-8')
post_data = form_part[line_index:-4] if field_name:
if file_name: post_data = form_part[line_index:-4]
file = File(type=content_type, name=file_name, body=post_data) if file_name:
if field_name in files: file = File(type=content_type, name=file_name, body=post_data)
files[field_name].append(file) if field_name in files:
files[field_name].append(file)
else:
files[field_name] = [file]
else: else:
files[field_name] = [file] value = post_data.decode(content_charset)
if field_name in fields:
fields[field_name].append(value)
else:
fields[field_name] = [value]
else: else:
value = post_data.decode(content_charset) logger.debug('Form-data field does not have a name parameter in the Content-Disposition header')
if field_name in fields:
fields[field_name].append(value)
else:
fields[field_name] = [value]
return fields, files return fields, files