summaryrefslogtreecommitdiffstats
path: root/Lib/email
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-07-17 17:13:54 (GMT)
committerGitHub <noreply@github.com>2019-07-17 17:13:54 (GMT)
commit6816ca30af7705db691343100e696ea3d8f447d5 (patch)
tree76a3242a232faa62d275f5ecc42087d1b79f2188 /Lib/email
parent1fc43a3fafd22eb20832459654fd125f12aa3738 (diff)
downloadcpython-6816ca30af7705db691343100e696ea3d8f447d5.zip
cpython-6816ca30af7705db691343100e696ea3d8f447d5.tar.gz
cpython-6816ca30af7705db691343100e696ea3d8f447d5.tar.bz2
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 a4a994bd3e619cbaff97610a1cee8ffa87c672f5) Co-authored-by: Abhilash Raj <maxking@users.noreply.github.com>
Diffstat (limited to 'Lib/email')
-rw-r--r--Lib/email/_header_value_parser.py3
1 files changed, 3 insertions, 0 deletions
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py
index 6475321..2fc8abc 100644
--- a/Lib/email/_header_value_parser.py
+++ b/Lib/email/_header_value_parser.py
@@ -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)