Skip to content

Commit ba6713e

Browse files
Victor's request
Co-authored-by: Victor Stinner <victor.stinner@gmail.com>
1 parent ae804e4 commit ba6713e

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

Lib/http/cookies.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,8 @@ def update(self, values):
338338
if key not in self._reserved:
339339
raise CookieError("Invalid attribute %r" % (key,))
340340
if _has_control_character(key, val):
341-
raise CookieError(f"Control characters are not allowed in cookies {key!r} {val!r}")
341+
raise CookieError("Control characters are not allowed in "
342+
f"cookies {key!r} {val!r}")
342343
data[key] = val
343344
dict.update(self, data)
344345

@@ -371,9 +372,15 @@ def __getstate__(self):
371372
}
372373

373374
def __setstate__(self, state):
374-
self._key = state['key']
375-
self._value = state['value']
376-
self._coded_value = state['coded_value']
375+
key = state['key']
376+
value = state['value']
377+
coded_value = state['coded_value']
378+
if _has_control_character(key, value, coded_value):
379+
raise CookieError("Control characters are not allowed in cookies "
380+
f"{key!r} {value!r} {coded_value!r}")
381+
self._key = key
382+
self._value = value
383+
self._coded_value = coded_value
377384

378385
def output(self, attrs=None, header="Set-Cookie:"):
379386
return "%s %s" % (header, self.OutputString(attrs))

Lib/test/test_http_cookies.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,15 @@ def test_control_characters(self):
604604
with self.assertRaises(cookies.CookieError):
605605
morsel["path"] = c0
606606

607+
# .__setstate__()
608+
with self.assertRaises(cookies.CookieError):
609+
morsel.__setstate__({'key': c0, 'value': 'val', 'coded_value': 'coded'})
610+
with self.assertRaises(cookies.CookieError):
611+
morsel.__setstate__({'key': 'key', 'value': c0, 'coded_value': 'coded'})
612+
with self.assertRaises(cookies.CookieError):
613+
morsel.__setstate__({'key': 'key', 'value': 'val', 'coded_value': c0})
614+
615+
607616
# .setdefault()
608617
with self.assertRaises(cookies.CookieError):
609618
morsel.setdefault("path", c0)

0 commit comments

Comments
 (0)