Add some logging for content-disposition

This commit is contained in:
Florian Bruhin 2014-08-14 14:01:44 +02:00
parent 0d38e1814e
commit 9585b3c925
2 changed files with 9 additions and 8 deletions

View File

@ -33,15 +33,11 @@ import qutebrowser.commands.utils as cmdutils
import qutebrowser.utils.misc as utils
from qutebrowser.utils.http import parse_content_disposition
from qutebrowser.utils.log import downloads as logger
from qutebrowser.utils.log import fix_rfc2622
from qutebrowser.utils.usertypes import PromptMode, Question, Timer
from qutebrowser.utils.qt import qt_ensure_valid
from qutebrowser.commands.exceptions import CommandError
fix_rfc2622()
class DownloadItem(QObject):
"""A single download currently running.

View File

@ -19,13 +19,16 @@
"""pyPEG parsing for the RFC 6266 (Content-Disposition) header. """
import pypeg2 as peg
from collections import namedtuple
import urllib.parse
import string
import re
import pypeg2 as peg
from qutebrowser.utils.log import rfc6266 as logger
class UniqueNamespace(peg.Namespace):
@ -298,6 +301,7 @@ def parse_headers(content_disposition):
# 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')
logger.debug("Parsing Content-Disposition: {}".format(content_disposition))
# Our parsing is relaxed in these regards:
# - The grammar allows a final ';' in the header;
# - We do LWS-folding, and possibly normalise other broken
@ -305,10 +309,11 @@ def parse_headers(content_disposition):
# XXX Would prefer to accept only the quoted whitespace
# case, rather than normalising everything.
content_disposition = normalize_ws(content_disposition)
try:
parsed = peg.parse(content_disposition, ContentDispositionValue)
except (SyntaxError, DuplicateParamError, InvalidISO8859Error):
except (SyntaxError, DuplicateParamError, InvalidISO8859Error) as e:
logger.warning("Error while parsing Content-Disposition: "
"{} - {}".format(e.__class__.__name__, e))
return ContentDisposition()
else:
return ContentDisposition(disposition=parsed.dtype,