diff options
| -rw-r--r-- | Lib/_LWPCookieJar.py | 7 | ||||
| -rw-r--r-- | Lib/_MozillaCookieJar.py | 3 | ||||
| -rw-r--r-- | Lib/cookielib.py | 6 | ||||
| -rw-r--r-- | Lib/test/test_cookielib.py | 19 | ||||
| -rw-r--r-- | Misc/NEWS | 3 | 
5 files changed, 26 insertions, 12 deletions
diff --git a/Lib/_LWPCookieJar.py b/Lib/_LWPCookieJar.py index 2c8d4564e0..25a25286ab 100644 --- a/Lib/_LWPCookieJar.py +++ b/Lib/_LWPCookieJar.py @@ -115,13 +115,6 @@ class LWPCookieJar(FileCookieJar):                  for data in split_header_words([line]):                      name, value = data[0] -                    # name and value are an exception here, since a plain "foo" -                    # (with no "=", unlike "bar=foo") means a cookie with no -                    # name and value "foo".  With all other cookie-attributes, -                    # the situation is reversed: "foo" means an attribute named -                    # "foo" with no value! -                    if value is None: -                        name, value = value, name                      standard = {}                      rest = {}                      for k in boolean_attrs: diff --git a/Lib/_MozillaCookieJar.py b/Lib/_MozillaCookieJar.py index 0e08c09d6c..88e8492504 100644 --- a/Lib/_MozillaCookieJar.py +++ b/Lib/_MozillaCookieJar.py @@ -73,6 +73,9 @@ class MozillaCookieJar(FileCookieJar):                  secure = (secure == "TRUE")                  domain_specified = (domain_specified == "TRUE")                  if name == "": +                    # cookies.txt regards 'Set-Cookie: foo' as a cookie +                    # with no name, whereas cookielib regards it as a +                    # cookie with no value.                      name = value                      value = None diff --git a/Lib/cookielib.py b/Lib/cookielib.py index 49989b436e..42a2513fec 100644 --- a/Lib/cookielib.py +++ b/Lib/cookielib.py @@ -451,11 +451,7 @@ def parse_ns_headers(ns_headers):              param = param.rstrip()              if param == "": continue              if "=" not in param: -                if param.lower() in known_attrs: -                    k, v = param, None -                else: -                    # cookie with missing value -                    k, v = param, None +                k, v = param, None              else:                  k, v = re.split(r"\s*=\s*", param, 1)                  k = k.lstrip() diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py index 679e3aa816..7828326250 100644 --- a/Lib/test/test_cookielib.py +++ b/Lib/test/test_cookielib.py @@ -231,6 +231,24 @@ def _interact(cookiejar, url, set_cookie_hdrs, hdr_name):      return cookie_hdr +class FileCookieJarTests(TestCase): +    def test_lwp_valueless_cookie(self): +        # cookies with no value should be saved and loaded consistently +        from cookielib import LWPCookieJar +        filename = test_support.TESTFN +        c = LWPCookieJar() +        interact_netscape(c, "http://www.acme.com/", 'boo') +        self.assertEqual(c._cookies["www.acme.com"]["/"]["boo"].value, None) +        try: +            c.save(filename, ignore_discard=True) +            c = LWPCookieJar() +            c.load(filename, ignore_discard=True) +        finally: +            try: os.unlink(filename) +            except OSError: pass +        self.assertEqual(c._cookies["www.acme.com"]["/"]["boo"].value, None) + +  class CookieTests(TestCase):      # XXX      # Get rid of string comparisons where not actually testing str / repr. @@ -1636,6 +1654,7 @@ def test_main(verbose=None):          DateTimeTests,          HeaderTests,          CookieTests, +        FileCookieJarTests,          LWPCookieTests,          ) @@ -61,6 +61,9 @@ Extension Modules  Library  ------- +- Patch #1117454: Remove code to special-case cookies without values +  in LWPCookieJar. +  - Patch #1117339: Add cookielib special name tests.  - Patch #1112812: Make bsddb/__init__.py more friendly for modulefinder.  | 
