]> granicus.if.org Git - python/commitdiff
Fix SF #1117398, cookielib LWPCookieJar and MozillaCookieJar exceptions
authorNeal Norwitz <nnorwitz@gmail.com>
Fri, 23 Dec 2005 21:24:35 +0000 (21:24 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Fri, 23 Dec 2005 21:24:35 +0000 (21:24 +0000)
cookielib.LWPCookieJar and .MozillaCookieJar are documented to raise
cookielib.LoadError on attempt to load an invalid cookies file, but
raise IOError instead.  Compromise by having LoadError subclass IOError.

Lib/_LWPCookieJar.py
Lib/_MozillaCookieJar.py
Lib/cookielib.py
Lib/test/test_cookielib.py

index 25a25286ab104153af7b06d9334eed2390649d38..6d5ce185e55b29a3f1341fe03a585fb02a2e8842 100644 (file)
@@ -12,8 +12,8 @@ libwww-perl, I hope.
 """
 
 import time, re, logging
-from cookielib import (reraise_unmasked_exceptions, FileCookieJar, Cookie,
-     MISSING_FILENAME_TEXT, join_header_words, split_header_words,
+from cookielib import (reraise_unmasked_exceptions, FileCookieJar, LoadError,
+     Cookie, MISSING_FILENAME_TEXT, join_header_words, split_header_words,
      iso2time, time2isoz)
 
 def lwp_cookie_str(cookie):
@@ -93,7 +93,7 @@ class LWPCookieJar(FileCookieJar):
         magic = f.readline()
         if not re.search(self.magic_re, magic):
             msg = "%s does not seem to contain cookies" % filename
-            raise IOError(msg)
+            raise LoadError(msg)
 
         now = time.time()
 
@@ -161,4 +161,4 @@ class LWPCookieJar(FileCookieJar):
                     self.set_cookie(c)
         except:
             reraise_unmasked_exceptions((IOError,))
-            raise IOError("invalid Set-Cookie3 format file %s" % filename)
+            raise LoadError("invalid Set-Cookie3 format file %s" % filename)
index 88e8492504b59f5b8ad67eb9e2d6fc96a5753202..4f2f3754d830daa59449983617bd3169782ed7be 100644 (file)
@@ -2,8 +2,8 @@
 
 import re, time, logging
 
-from cookielib import (reraise_unmasked_exceptions, FileCookieJar, Cookie,
-     MISSING_FILENAME_TEXT)
+from cookielib import (reraise_unmasked_exceptions, FileCookieJar, LoadError,
+     Cookie, MISSING_FILENAME_TEXT)
 
 class MozillaCookieJar(FileCookieJar):
     """
@@ -50,7 +50,7 @@ class MozillaCookieJar(FileCookieJar):
         magic = f.readline()
         if not re.search(self.magic_re, magic):
             f.close()
-            raise IOError(
+            raise LoadError(
                 "%s does not look like a Netscape format cookies file" %
                 filename)
 
@@ -106,8 +106,8 @@ class MozillaCookieJar(FileCookieJar):
 
         except:
             reraise_unmasked_exceptions((IOError,))
-            raise IOError("invalid Netscape format file %s: %s" %
-                          (filename, line))
+            raise LoadError("invalid Netscape format file %s: %s" %
+                            (filename, line))
 
     def save(self, filename=None, ignore_discard=False, ignore_expires=False):
         if filename is None:
index f774cdfa5bbc28bf7c99073a1c99d3ed379ddeba..656ae398fd36c2ffce61a06aa150bfece52749fa 100644 (file)
@@ -1682,7 +1682,8 @@ class CookieJar:
         return "<%s[%s]>" % (self.__class__, ", ".join(r))
 
 
-class LoadError(Exception): pass
+# derives from IOError for backwards-compatibility with Python 2.4.0
+class LoadError(IOError): pass
 
 class FileCookieJar(CookieJar):
     """CookieJar that can be loaded from and saved to a file."""
index 78283262506f8317703d1c17ea548199c56a7f78..f0c66837ce63ab905eff4d0c00d58fa23384c8d3 100644 (file)
@@ -248,6 +248,31 @@ class FileCookieJarTests(TestCase):
             except OSError: pass
         self.assertEqual(c._cookies["www.acme.com"]["/"]["boo"].value, None)
 
+    def test_bad_magic(self):
+        from cookielib import LWPCookieJar, MozillaCookieJar, LoadError
+        # IOErrors (eg. file doesn't exist) are allowed to propagate
+        filename = test_support.TESTFN
+        for cookiejar_class in LWPCookieJar, MozillaCookieJar:
+            c = cookiejar_class()
+            try:
+                c.load(filename="for this test to work, a file with this "
+                                "filename should not exist")
+            except IOError, exc:
+                # exactly IOError, not LoadError
+                self.assertEqual(exc.__class__, IOError)
+            else:
+                self.fail("expected IOError for invalid filename")
+        # Invalid contents of cookies file (eg. bad magic string)
+        # causes a LoadError.
+        try:
+            f = open(filename, "w")
+            f.write("oops\n")
+            for cookiejar_class in LWPCookieJar, MozillaCookieJar:
+                c = cookiejar_class()
+                self.assertRaises(LoadError, c.load, filename)
+        finally:
+            try: os.unlink(filename)
+            except OSError: pass
 
 class CookieTests(TestCase):
     # XXX