diff options
author | Gregory P. Smith <greg@krypto.org> | 2023-07-21 03:30:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-21 03:30:52 (GMT) |
commit | a31dea1feb61793e48fa9aa5014f358352205c1d (patch) | |
tree | fe53ab71a1484a9a7047393ca2d54218f9dbcb05 /Lib/email | |
parent | d81b4f8ff84311fa737e62f2883442ec06d7d5d8 (diff) | |
download | cpython-a31dea1feb61793e48fa9aa5014f358352205c1d.zip cpython-a31dea1feb61793e48fa9aa5014f358352205c1d.tar.gz cpython-a31dea1feb61793e48fa9aa5014f358352205c1d.tar.bz2 |
gh-106669: Revert "gh-102988: Detect email address parsing errors ... (#105127)" (#106733)
This reverts commit 18dfbd035775c15533d13a98e56b1d2bf5c65f00.
Adds a regression test from the issue.
See https://github.com/python/cpython/issues/106669.
Diffstat (limited to 'Lib/email')
-rw-r--r-- | Lib/email/utils.py | 63 |
1 files changed, 6 insertions, 57 deletions
diff --git a/Lib/email/utils.py b/Lib/email/utils.py index 11ad75e..81da539 100644 --- a/Lib/email/utils.py +++ b/Lib/email/utils.py @@ -106,54 +106,12 @@ def formataddr(pair, charset='utf-8'): return address -def _pre_parse_validation(email_header_fields): - accepted_values = [] - for v in email_header_fields: - s = v.replace('\\(', '').replace('\\)', '') - if s.count('(') != s.count(')'): - v = "('', '')" - accepted_values.append(v) - - return accepted_values - - -def _post_parse_validation(parsed_email_header_tuples): - accepted_values = [] - # The parser would have parsed a correctly formatted domain-literal - # The existence of an [ after parsing indicates a parsing failure - for v in parsed_email_header_tuples: - if '[' in v[1]: - v = ('', '') - accepted_values.append(v) - - return accepted_values - def getaddresses(fieldvalues): - """Return a list of (REALNAME, EMAIL) or ('','') for each fieldvalue. - - When parsing fails for a fieldvalue, a 2-tuple of ('', '') is returned in - its place. - - If the resulting list of parsed address is not the same as the number of - fieldvalues in the input list a parsing error has occurred. A list - containing a single empty 2-tuple [('', '')] is returned in its place. - This is done to avoid invalid output. - """ - fieldvalues = [str(v) for v in fieldvalues] - fieldvalues = _pre_parse_validation(fieldvalues) - all = COMMASPACE.join(v for v in fieldvalues) + """Return a list of (REALNAME, EMAIL) for each fieldvalue.""" + all = COMMASPACE.join(str(v) for v in fieldvalues) a = _AddressList(all) - result = _post_parse_validation(a.addresslist) - - n = 0 - for v in fieldvalues: - n += v.count(',') + 1 - - if len(result) != n: - return [('', '')] - - return result + return a.addresslist def _format_timetuple_and_zone(timetuple, zone): @@ -254,18 +212,9 @@ def parseaddr(addr): Return a tuple of realname and email address, unless the parse fails, in which case return a 2-tuple of ('', ''). """ - if isinstance(addr, list): - addr = addr[0] - - if not isinstance(addr, str): - return ('', '') - - addr = _pre_parse_validation([addr])[0] - addrs = _post_parse_validation(_AddressList(addr).addresslist) - - if not addrs or len(addrs) > 1: - return ('', '') - + addrs = _AddressList(addr).addresslist + if not addrs: + return '', '' return addrs[0] |