mirror of
https://github.com/python/cpython.git
synced 2026-02-28 10:00:52 +00:00
bpo-37461: Fix infinite loop in parsing of specially crafted email headers (GH-14794)
* bpo-37461: Fix infinite loop in parsing of specially crafted email headers.
Some crafted email header would cause the get_parameter method to run in an
infinite loop causing a DoS attack surface when parsing those headers. This
patch fixes that by making sure the DQUOTE character is handled to prevent
going into an infinite loop.
(cherry picked from commit a4a994bd3e)
Co-authored-by: Abhilash Raj <maxking@users.noreply.github.com>
This commit is contained in:
parent
1fc43a3faf
commit
6816ca30af
3 changed files with 12 additions and 0 deletions
|
|
@ -2475,6 +2475,9 @@ def get_parameter(value):
|
|||
while value:
|
||||
if value[0] in WSP:
|
||||
token, value = get_fws(value)
|
||||
elif value[0] == '"':
|
||||
token = ValueTerminal('"', 'DQUOTE')
|
||||
value = value[1:]
|
||||
else:
|
||||
token, value = get_qcontent(value)
|
||||
v.append(token)
|
||||
|
|
|
|||
|
|
@ -2690,6 +2690,13 @@ def mime_parameters_as_value(self,
|
|||
# Defects are apparent missing *0*, and two 'out of sequence'.
|
||||
[errors.InvalidHeaderDefect]*3),
|
||||
|
||||
# bpo-37461: Check that we don't go into an infinite loop.
|
||||
'extra_dquote': (
|
||||
'r*="\'a\'\\"',
|
||||
' r="\\""',
|
||||
'r*=\'a\'"',
|
||||
[('r', '"')],
|
||||
[errors.InvalidHeaderDefect]*2),
|
||||
}
|
||||
|
||||
@parameterize
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
Fix an inifite loop when parsing specially crafted email headers. Patch by
|
||||
Abhilash Raj.
|
||||
Loading…
Add table
Add a link
Reference in a new issue