Commit b3572da1 authored by R. David Murray's avatar R. David Murray

#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.
parent 37eff4f6
...@@ -173,6 +173,11 @@ _Translator = { ...@@ -173,6 +173,11 @@ _Translator = {
'\033' : '\\033', '\034' : '\\034', '\035' : '\\035', '\033' : '\\033', '\034' : '\\034', '\035' : '\\035',
'\036' : '\\036', '\037' : '\\037', '\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', '\177' : '\\177', '\200' : '\\200', '\201' : '\\201',
......
...@@ -69,6 +69,14 @@ class CookieTests(unittest.TestCase): ...@@ -69,6 +69,14 @@ class CookieTests(unittest.TestCase):
</script> </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): def test_special_attrs(self):
# 'expires' # 'expires'
C = cookies.SimpleCookie('Customer="WILE_E_COYOTE"') C = cookies.SimpleCookie('Customer="WILE_E_COYOTE"')
......
...@@ -20,6 +20,9 @@ Core and Builtins ...@@ -20,6 +20,9 @@ Core and Builtins
Library 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. - Issue 9333: os.symlink now available regardless of user privileges.
The function now raises OSError on Windows >=6.0 when the user is unable The function now raises OSError on Windows >=6.0 when the user is unable
to create symbolic links. XP and 2003 still raise NotImplementedError. to create symbolic links. XP and 2003 still raise NotImplementedError.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment