Skip to content

Commit 2961efb

Browse files
committed
gh-154546: Validate cookie key before applying in BaseCookie.load()
1 parent aad438b commit 2961efb

3 files changed

Lines changed: 12 additions & 0 deletions

File tree

Lib/http/cookies.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,8 @@ def __parse_string(self, str, patt=_CookiePattern):
618618
else:
619619
parsed_items.append((TYPE_ATTRIBUTE, key, _unquote(value)))
620620
elif value is not None:
621+
if not _is_legal_key(key):
622+
raise CookieError('Illegal key %r' % (key,))
621623
parsed_items.append((TYPE_KEYVALUE, key, self.value_decode(value)))
622624
morsel_seen = True
623625
else:

Lib/test/test_http_cookies.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,12 @@ def test_illegal_chars(self):
320320
with self.assertRaises(cookies.CookieError):
321321
C.load(rawdata)
322322

323+
def test_illegal_key_no_partial_state(self):
324+
C = cookies.SimpleCookie()
325+
with self.assertRaises(cookies.CookieError):
326+
C.load("a=1; b,c=2; d=3")
327+
self.assertEqual(len(C), 0)
328+
323329
def test_comment_quoting(self):
324330
c = cookies.SimpleCookie()
325331
c['foo'] = '\N{COPYRIGHT SIGN}'
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Validate cookie key characters during parsing in
2+
:meth:`http.cookies.BaseCookie.load` so that an illegal key raises
3+
:exc:`~http.cookies.CookieError` before any cookies are applied. Patch by
4+
tonghuaroot.

0 commit comments

Comments
 (0)