]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport: Patch #1117398: fix cookielib LoadError
authorNeal Norwitz <nnorwitz@gmail.com>
Fri, 23 Dec 2005 21:32:06 +0000 (21:32 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Fri, 23 Dec 2005 21:32:06 +0000 (21:32 +0000)
Lib/_LWPCookieJar.py
Lib/_MozillaCookieJar.py
Lib/cookielib.py
Lib/test/test_cookielib.py
Misc/NEWS

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 19973a84ca9a4435da19da3b66042e479df92033..d2c56d11e187398d582cc3f62651dbc80342739c 100644 (file)
@@ -1687,7 +1687,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
index 18323abbb65b0595f51298148e0abe43c84ea45c..0f46ed36b9649063228ee36b62e17257f5b45715 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -53,6 +53,10 @@ Extension Modules
 Library
 -------
 
+- Patch #1117398: cookielib.LWPCookieJar and .MozillaCookieJar now raise
+  LoadError as documented, instead of IOError.  For compatibility,
+  LoadError subclasses IOError.
+
 - Bug #1365984: urllib now opens "data:" URLs again.
 
 - Patch #1314396: Prevent threading.Thread.join() from blocking if a previous