From: Neal Norwitz Date: Fri, 23 Dec 2005 21:32:06 +0000 (+0000) Subject: Backport: Patch #1117398: fix cookielib LoadError X-Git-Tag: v2.4.3c1~178 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b8a9b8ce43cac40c356a9080ffa9e030ae556898;p=thirdparty%2FPython%2Fcpython.git Backport: Patch #1117398: fix cookielib LoadError --- diff --git a/Lib/_LWPCookieJar.py b/Lib/_LWPCookieJar.py index 25a25286ab10..6d5ce185e55b 100644 --- a/Lib/_LWPCookieJar.py +++ b/Lib/_LWPCookieJar.py @@ -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) diff --git a/Lib/_MozillaCookieJar.py b/Lib/_MozillaCookieJar.py index 88e8492504b5..4f2f3754d830 100644 --- a/Lib/_MozillaCookieJar.py +++ b/Lib/_MozillaCookieJar.py @@ -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: diff --git a/Lib/cookielib.py b/Lib/cookielib.py index 19973a84ca9a..d2c56d11e187 100644 --- a/Lib/cookielib.py +++ b/Lib/cookielib.py @@ -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.""" diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py index 78283262506f..f0c66837ce63 100644 --- a/Lib/test/test_cookielib.py +++ b/Lib/test/test_cookielib.py @@ -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 diff --git a/Misc/NEWS b/Misc/NEWS index 18323abbb65b..0f46ed36b964 100644 --- 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