diff options
author | R David Murray <rdmurray@bitdance.com> | 2013-07-12 16:01:10 -0400 |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2013-07-12 16:01:10 -0400 |
commit | c9c5f8fb5929659ada98b0b26b06b7f129b29968 (patch) | |
tree | b5795776408d6ac6985c8ac8570cfdac2327a5cb /Lib/email | |
parent | 82d573fad7cb24c5e6d31f7a5054349934da62f9 (diff) | |
parent | 4bddcdc2ebc2526a9154e0cd86b1ea1df5969520 (diff) | |
download | cpython-c9c5f8fb5929659ada98b0b26b06b7f129b29968.tar.gz |
Merge: #18431: Decode encoded words in atoms in new email parser.
Diffstat (limited to 'Lib/email')
-rw-r--r-- | Lib/email/_header_value_parser.py | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py index 32fc06e35d..039237936c 100644 --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -1624,6 +1624,7 @@ def get_quoted_string(value): def get_atom(value): """atom = [CFWS] 1*atext [CFWS] + An atom could be an rfc2047 encoded word. """ atom = Atom() if value and value[0] in CFWS_LEADER: @@ -1632,7 +1633,15 @@ def get_atom(value): if value and value[0] in ATOM_ENDS: raise errors.HeaderParseError( "expected atom but found '{}'".format(value)) - token, value = get_atext(value) + if value.startswith('=?'): + try: + token, value = get_encoded_word(value) + except errors.HeaderParseError: + # XXX: need to figure out how to register defects when + # appropriate here. + token, value = get_atext(value) + else: + token, value = get_atext(value) atom.append(token) if value and value[0] in CFWS_LEADER: token, value = get_cfws(value) @@ -1661,12 +1670,22 @@ def get_dot_atom_text(value): def get_dot_atom(value): """ dot-atom = [CFWS] dot-atom-text [CFWS] + Any place we can have a dot atom, we could instead have an rfc2047 encoded + word. """ dot_atom = DotAtom() if value[0] in CFWS_LEADER: token, value = get_cfws(value) dot_atom.append(token) - token, value = get_dot_atom_text(value) + if value.startswith('=?'): + try: + token, value = get_encoded_word(value) + except errors.HeaderParseError: + # XXX: need to figure out how to register defects when + # appropriate here. + token, value = get_dot_atom_text(value) + else: + token, value = get_dot_atom_text(value) dot_atom.append(token) if value and value[0] in CFWS_LEADER: token, value = get_cfws(value) |