mirror of
https://github.com/python/cpython.git
synced 2024-11-25 02:44:06 +08:00
#9824: encode , and ; in cookie values so that browsers don't split on them
There is a small chance of backward incompatibility here, but only for non-SimpleCookie applications reading SimpleCookie generated cookies. Even then, any such ap is likely to be handling escaped values already, and it would take a fairly perverse implementation of unescaping to fail to unescape these newly escaped chars, so the risk seems minimal.
This commit is contained in:
parent
8aa7e999b5
commit
e05ca2aff4
@ -173,6 +173,11 @@ _Translator = {
|
||||
'\033' : '\\033', '\034' : '\\034', '\035' : '\\035',
|
||||
'\036' : '\\036', '\037' : '\\037',
|
||||
|
||||
# Because of the way browsers really handle cookies (as opposed
|
||||
# to what the RFC says) we also encode , and ;
|
||||
|
||||
',' : '\\054', ';' : '\\073',
|
||||
|
||||
'"' : '\\"', '\\' : '\\\\',
|
||||
|
||||
'\177' : '\\177', '\200' : '\\200', '\201' : '\\201',
|
||||
|
@ -69,6 +69,14 @@ class CookieTests(unittest.TestCase):
|
||||
</script>
|
||||
""")
|
||||
|
||||
def test_extended_encode(self):
|
||||
# Issue 9824: some browsers don't follow the standard; we now
|
||||
# encode , and ; to keep them from tripping up.
|
||||
C = cookies.SimpleCookie()
|
||||
C['val'] = "some,funky;stuff"
|
||||
self.assertEqual(C.output(['val']),
|
||||
'Set-Cookie: val="some\\054funky\\073stuff"')
|
||||
|
||||
def test_special_attrs(self):
|
||||
# 'expires'
|
||||
C = cookies.SimpleCookie('Customer="WILE_E_COYOTE"')
|
||||
|
@ -20,6 +20,9 @@ Core and Builtins
|
||||
Library
|
||||
-------
|
||||
|
||||
- Issue 9824: SimpleCookie now encodes , and ; in values to cater to how
|
||||
browsers actually parse cookies.
|
||||
|
||||
- Issue 9333: os.symlink now available regardless of user privileges.
|
||||
The function now raises OSError on Windows >=6.0 when the user is unable
|
||||
to create symbolic links. XP and 2003 still raise NotImplementedError.
|
||||
|
Loading…
Reference in New Issue
Block a user