summaryrefslogtreecommitdiffstats
path: root/Lib/email/_header_value_parser.py
diff options
context:
space:
mode:
authortsufeki <tsufeki@ymail.com>2024-04-17 07:39:15 (GMT)
committerGitHub <noreply@github.com>2024-04-17 07:39:15 (GMT)
commit8cc9adbfddc8e37cf7d621b12754eecb0584f5da (patch)
tree9fa5147ca1dbf9e61221f64d0d39efc2bdc94690 /Lib/email/_header_value_parser.py
parent8123c34faa5aab20edc268c7f8a81e6a765af366 (diff)
downloadcpython-8cc9adbfddc8e37cf7d621b12754eecb0584f5da.zip
cpython-8cc9adbfddc8e37cf7d621b12754eecb0584f5da.tar.gz
cpython-8cc9adbfddc8e37cf7d621b12754eecb0584f5da.tar.bz2
gh-75171: Fix parsing invalid email address headers starting or ending with a dot (GH-15600)
Co-authored-by: Tim Bell <timothybell@gmail.com> Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Lib/email/_header_value_parser.py')
-rw-r--r--Lib/email/_header_value_parser.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py
index e4a342d..0cf23fc 100644
--- a/Lib/email/_header_value_parser.py
+++ b/Lib/email/_header_value_parser.py
@@ -566,12 +566,14 @@ class DisplayName(Phrase):
if res[0].token_type == 'cfws':
res.pop(0)
else:
- if res[0][0].token_type == 'cfws':
+ if (isinstance(res[0], TokenList) and
+ res[0][0].token_type == 'cfws'):
res[0] = TokenList(res[0][1:])
if res[-1].token_type == 'cfws':
res.pop()
else:
- if res[-1][-1].token_type == 'cfws':
+ if (isinstance(res[-1], TokenList) and
+ res[-1][-1].token_type == 'cfws'):
res[-1] = TokenList(res[-1][:-1])
return res.value
@@ -586,9 +588,13 @@ class DisplayName(Phrase):
quote = True
if len(self) != 0 and quote:
pre = post = ''
- if self[0].token_type=='cfws' or self[0][0].token_type=='cfws':
+ if (self[0].token_type == 'cfws' or
+ isinstance(self[0], TokenList) and
+ self[0][0].token_type == 'cfws'):
pre = ' '
- if self[-1].token_type=='cfws' or self[-1][-1].token_type=='cfws':
+ if (self[-1].token_type == 'cfws' or
+ isinstance(self[-1], TokenList) and
+ self[-1][-1].token_type == 'cfws'):
post = ' '
return pre+quote_string(self.display_name)+post
else:
@@ -1772,7 +1778,10 @@ def get_name_addr(value):
raise errors.HeaderParseError(
"expected name-addr but found '{}'".format(token))
if leader is not None:
- token[0][:0] = [leader]
+ if isinstance(token[0], TokenList):
+ token[0][:0] = [leader]
+ else:
+ token[:0] = [leader]
leader = None
name_addr.append(token)
token, value = get_angle_addr(value)