rfc6266: Improve error handling

This commit is contained in:
Florian Bruhin 2021-01-17 12:41:08 +01:00
parent 213f5232c9
commit bc64ea7fad
2 changed files with 8 additions and 6 deletions

View File

@ -47,12 +47,11 @@ def parse_content_disposition(reply):
# os.path.basename later.
try:
value = bytes(reply.rawHeader(content_disposition_header))
log.rfc6266.debug("Parsing Content-Disposition: {!r}".format(
value))
log.rfc6266.debug("Parsing Content-Disposition: {value!r}")
content_disposition = rfc6266.parse_headers(value)
filename = content_disposition.filename()
except (UnicodeDecodeError, rfc6266.Error):
log.rfc6266.exception("Error while parsing filename")
except rfc6266.Error as e:
log.rfc6266.error(f"Error while parsing filename: {e}")
else:
is_inline = content_disposition.is_inline()
# Then try to get filename from url

View File

@ -80,13 +80,16 @@ def parse_headers(content_disposition):
# value won't get dismissed because of an unrelated ambiguity in the
# filename parameter. But it does mean we occasionally give
# less-than-certain values for some legacy senders.
content_disposition = content_disposition.decode('iso-8859-1')
try:
content_disposition = content_disposition.decode('iso-8859-1')
except UnicodeDecodeError as e:
raise Error(e)
reg = email.headerregistry.HeaderRegistry()
parsed = reg('Content-Disposition', content_disposition)
if parsed.defects:
raise Error(parsed.defects)
raise Error(list(parsed.defects))
return _ContentDisposition(disposition=parsed.content_disposition,
params=parsed.params)