gh-39128: Fix email.utils.unquote() parameter parsing

This commit is contained in:
Shamil Abdulaev 2025-11-18 13:05:27 +03:00
parent 630cd37bfa
commit 3fa13e8af5
No known key found for this signature in database
GPG key ID: F9F7726024C005E7
3 changed files with 43 additions and 2 deletions

View file

@ -357,8 +357,16 @@ def parseaddr(addr, *, strict=True):
def unquote(str):
"""Remove quotes from a string."""
if len(str) > 1:
if str.startswith('"') and str.endswith('"'):
return str[1:-1].replace('\\\\', '\\').replace('\\"', '"')
if str.startswith('"'):
pos = 1
while pos < len(str):
if str[pos] == '\\' and pos + 1 < len(str):
pos += 2
elif str[pos] == '"':
content = str[1:pos]
return re.sub(r'\\(.)', r'\1', content)
else:
pos += 1
if str.startswith('<') and str.endswith('>'):
return str[1:-1]
return str