]> granicus.if.org Git - python/commitdiff
Merged revisions 81465-81466 via svnmerge from
authorGeorg Brandl <georg@python.org>
Sat, 22 May 2010 11:32:59 +0000 (11:32 +0000)
committerGeorg Brandl <georg@python.org>
Sat, 22 May 2010 11:32:59 +0000 (11:32 +0000)
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r81465 | georg.brandl | 2010-05-22 13:29:19 +0200 (Sa, 22 Mai 2010) | 2 lines

  Issue #3924: Ignore cookies with invalid "version" field in cookielib.
........
  r81466 | georg.brandl | 2010-05-22 13:31:16 +0200 (Sa, 22 Mai 2010) | 1 line

  Underscore the name of an internal utility function.
........

Lib/cookielib.py
Lib/test/test_cookielib.py
Misc/NEWS

index 6b59794869a07491de8276d1f8322ed43cbb4740..b61a2b2a1a57a2f5ec08888ee665a73fdead769d 100644 (file)
@@ -434,6 +434,13 @@ def join_header_words(lists):
         if attr: headers.append("; ".join(attr))
     return ", ".join(headers)
 
+def _strip_quotes(text):
+    if text.startswith('"'):
+        text = text[1:]
+    if text.endswith('"'):
+        text = text[:-1]
+    return text
+
 def parse_ns_headers(ns_headers):
     """Ad-hoc parser for Netscape protocol cookie-attributes.
 
@@ -451,7 +458,7 @@ def parse_ns_headers(ns_headers):
     """
     known_attrs = ("expires", "domain", "path", "secure",
                    # RFC 2109 attrs (may turn up in Netscape cookies, too)
-                   "port", "max-age")
+                   "version", "port", "max-age")
 
     result = []
     for ns_header in ns_headers:
@@ -471,12 +478,11 @@ def parse_ns_headers(ns_headers):
                     k = lc
                 if k == "version":
                     # This is an RFC 2109 cookie.
+                    v = _strip_quotes(v)
                     version_set = True
                 if k == "expires":
                     # convert expires date to seconds since epoch
-                    if v.startswith('"'): v = v[1:]
-                    if v.endswith('"'): v = v[:-1]
-                    v = http2time(v)  # None if invalid
+                    v = http2time(_strip_quotes(v))  # None if invalid
             pairs.append((k, v))
 
         if pairs:
@@ -1450,7 +1456,11 @@ class CookieJar:
 
         # set the easy defaults
         version = standard.get("version", None)
-        if version is not None: version = int(version)
+        if version is not None:
+            try:
+                version = int(version)
+            except ValueError:
+                return None  # invalid version, ignore cookie
         secure = standard.get("secure", False)
         # (discard is also set if expires is Absent)
         discard = standard.get("discard", False)
index 93d62f784c97542426e5ba9d6a555e5a79073f77..8394f8ea6e86bd3aa66c9a22a08be361e767fd99 100644 (file)
@@ -99,7 +99,8 @@ class DateTimeTests(TestCase):
 
 
 class HeaderTests(TestCase):
-    def test_parse_ns_headers(self):
+
+    def test_parse_ns_headers_expires(self):
         from cookielib import parse_ns_headers
 
         # quotes should be stripped
@@ -110,6 +111,17 @@ class HeaderTests(TestCase):
             ]:
             self.assertEquals(parse_ns_headers([hdr]), expected)
 
+    def test_parse_ns_headers_version(self):
+        from cookielib import parse_ns_headers
+
+        # quotes should be stripped
+        expected = [[('foo', 'bar'), ('version', '1')]]
+        for hdr in [
+            'foo=bar; version="1"',
+            'foo=bar; Version="1"',
+            ]:
+            self.assertEquals(parse_ns_headers([hdr]), expected)
+
     def test_parse_ns_headers_special_names(self):
         # names such as 'expires' are not special in first name=value pair
         # of Set-Cookie: header
@@ -1093,6 +1105,8 @@ class CookieTests(TestCase):
             ["Set-Cookie2: a=foo; path=/; Version=1; domain"],
             # bad max-age
             ["Set-Cookie: b=foo; max-age=oops"],
+            # bad version
+            ["Set-Cookie: b=foo; version=spam"],
             ]:
             c = cookiejar_from_cookie_headers(headers)
             # these bad cookies shouldn't be set
index 845a41d189871f4f011bbc8e9c3a4243591cee7a..63fafe667025106a6791c159da622efb8633f23c 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -55,6 +55,8 @@ C-API
 Library
 -------
 
+- Issue #3924: Ignore cookies with invalid "version" field in cookielib.
+
 - Issue #6268: Fix seek() method of codecs.open(), don't read the BOM twice
   after seek(0)