mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Issue #22775: Fixed unpickling of http.cookies.SimpleCookie with protocol 2
and above. Patch by Tim Graham.
This commit is contained in:
commit
2cb0e73a89
5 changed files with 25 additions and 4 deletions
|
@ -486,8 +486,12 @@ class BaseCookie(dict):
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
def __setitem__(self, key, value):
|
||||||
"""Dictionary style assignment."""
|
"""Dictionary style assignment."""
|
||||||
rval, cval = self.value_encode(value)
|
if isinstance(value, Morsel):
|
||||||
self.__set(key, rval, cval)
|
# allow assignment of constructed Morsels (e.g. for pickling)
|
||||||
|
dict.__setitem__(self, key, value)
|
||||||
|
else:
|
||||||
|
rval, cval = self.value_encode(value)
|
||||||
|
self.__set(key, rval, cval)
|
||||||
|
|
||||||
def output(self, attrs=None, header="Set-Cookie:", sep="\015\012"):
|
def output(self, attrs=None, header="Set-Cookie:", sep="\015\012"):
|
||||||
"""Return a string suitable for HTTP."""
|
"""Return a string suitable for HTTP."""
|
||||||
|
|
|
@ -1284,7 +1284,7 @@ class AbstractPickleTests(unittest.TestCase):
|
||||||
loaded = self.loads(DATA5)
|
loaded = self.loads(DATA5)
|
||||||
self.assertEqual(type(loaded), SimpleCookie)
|
self.assertEqual(type(loaded), SimpleCookie)
|
||||||
self.assertEqual(list(loaded.keys()), ["key"])
|
self.assertEqual(list(loaded.keys()), ["key"])
|
||||||
self.assertEqual(loaded["key"].value, "Set-Cookie: key=value")
|
self.assertEqual(loaded["key"].value, "value")
|
||||||
|
|
||||||
for (exc, data) in DATA7.items():
|
for (exc, data) in DATA7.items():
|
||||||
loaded = self.loads(data)
|
loaded = self.loads(data)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
from test.support import run_unittest, run_doctest, check_warnings
|
from test.support import run_unittest, run_doctest, check_warnings
|
||||||
import unittest
|
import unittest
|
||||||
from http import cookies
|
from http import cookies
|
||||||
|
import pickle
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
class CookieTests(unittest.TestCase):
|
class CookieTests(unittest.TestCase):
|
||||||
|
@ -187,6 +187,19 @@ class CookieTests(unittest.TestCase):
|
||||||
self.assertEqual(dict(C), {})
|
self.assertEqual(dict(C), {})
|
||||||
self.assertEqual(C.output(), '')
|
self.assertEqual(C.output(), '')
|
||||||
|
|
||||||
|
def test_pickle(self):
|
||||||
|
rawdata = 'Customer="WILE_E_COYOTE"; Path=/acme; Version=1'
|
||||||
|
expected_output = 'Set-Cookie: %s' % rawdata
|
||||||
|
|
||||||
|
C = cookies.SimpleCookie()
|
||||||
|
C.load(rawdata)
|
||||||
|
self.assertEqual(C.output(), expected_output)
|
||||||
|
|
||||||
|
for proto in range(pickle.HIGHEST_PROTOCOL + 1):
|
||||||
|
with self.subTest(proto=proto):
|
||||||
|
C1 = pickle.loads(pickle.dumps(C, protocol=proto))
|
||||||
|
self.assertEqual(C1.output(), expected_output)
|
||||||
|
|
||||||
|
|
||||||
class MorselTests(unittest.TestCase):
|
class MorselTests(unittest.TestCase):
|
||||||
"""Tests for the Morsel object."""
|
"""Tests for the Morsel object."""
|
||||||
|
|
|
@ -496,6 +496,7 @@ Chris Gonnerman
|
||||||
Shelley Gooch
|
Shelley Gooch
|
||||||
David Goodger
|
David Goodger
|
||||||
Hans de Graaff
|
Hans de Graaff
|
||||||
|
Tim Graham
|
||||||
Kim Gräsman
|
Kim Gräsman
|
||||||
Nathaniel Gray
|
Nathaniel Gray
|
||||||
Eddy De Greef
|
Eddy De Greef
|
||||||
|
|
|
@ -183,6 +183,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #22775: Fixed unpickling of http.cookies.SimpleCookie with protocol 2
|
||||||
|
and above. Patch by Tim Graham.
|
||||||
|
|
||||||
- Issue #22776: Brought excluded code into the scope of a try block in
|
- Issue #22776: Brought excluded code into the scope of a try block in
|
||||||
SysLogHandler.emit().
|
SysLogHandler.emit().
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue