]> granicus.if.org Git - python/commitdiff
Merged revisions 87550 via svnmerge from
authorR. David Murray <rdmurray@bitdance.com>
Tue, 28 Dec 2010 18:56:33 +0000 (18:56 +0000)
committerR. David Murray <rdmurray@bitdance.com>
Tue, 28 Dec 2010 18:56:33 +0000 (18:56 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r87550 | r.david.murray | 2010-12-28 13:54:13 -0500 (Tue, 28 Dec 2010) | 8 lines

  #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.
........

Lib/http/cookies.py
Lib/test/test_http_cookies.py
Misc/NEWS

index e584396caf7dc343d0ceac7fd25f0cfd45b248e5..0d9e6d0e3ad21d6a3fc097a2a2d3111e80e3fcf4 100644 (file)
@@ -178,6 +178,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',
index 99133f79290f6576b6453c1a02d171056e6ca389..cc225cd49d1c2dcfeca253a8c88985b4c4e953aa 100644 (file)
@@ -65,6 +65,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"')
index d0dd3a19c605f517a0362be5c712dc1b1d2ba31b..77d776926ea866183c823c9888e2e630c2abfdfd 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -24,6 +24,9 @@ Core and Builtins
 Library
 -------
 
+- Issue 9824: SimpleCookie now encodes , and ; in values to cater to how
+  browsers actually parse cookies.
+
 - Issue #5258/#10642: if site.py encounters a .pth file that generates an error,
   it now prints the filename, line number, and traceback to stderr and skips
   the rest of that individual file, instead of stopping processing entirely.