[Python-checkins] commit of r41798 - in python/trunk/Lib: _LWPCookieJar.py _MozillaCookieJar.py cookielib.py test/test_cookielib.py

neal.norwitz python-checkins at python.org
Fri Dec 23 22:24:37 CET 2005


Author: neal.norwitz
Date: Fri Dec 23 22:24:35 2005
New Revision: 41798

Modified:
   python/trunk/Lib/_LWPCookieJar.py
   python/trunk/Lib/_MozillaCookieJar.py
   python/trunk/Lib/cookielib.py
   python/trunk/Lib/test/test_cookielib.py
Log:
Fix SF #1117398, cookielib LWPCookieJar and MozillaCookieJar exceptions

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.



Modified: python/trunk/Lib/_LWPCookieJar.py
==============================================================================
--- python/trunk/Lib/_LWPCookieJar.py	(original)
+++ python/trunk/Lib/_LWPCookieJar.py	Fri Dec 23 22:24:35 2005
@@ -12,8 +12,8 @@
 """
 
 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 @@
         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 @@
                     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)

Modified: python/trunk/Lib/_MozillaCookieJar.py
==============================================================================
--- python/trunk/Lib/_MozillaCookieJar.py	(original)
+++ python/trunk/Lib/_MozillaCookieJar.py	Fri Dec 23 22:24:35 2005
@@ -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 @@
         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 @@
 
         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:

Modified: python/trunk/Lib/cookielib.py
==============================================================================
--- python/trunk/Lib/cookielib.py	(original)
+++ python/trunk/Lib/cookielib.py	Fri Dec 23 22:24:35 2005
@@ -1682,7 +1682,8 @@
         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."""

Modified: python/trunk/Lib/test/test_cookielib.py
==============================================================================
--- python/trunk/Lib/test/test_cookielib.py	(original)
+++ python/trunk/Lib/test/test_cookielib.py	Fri Dec 23 22:24:35 2005
@@ -248,6 +248,31 @@
             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


More information about the Python-checkins mailing list