mirror of
https://github.com/python/cpython
synced 2024-10-14 09:58:30 +00:00
gh-99576: Fix cookiejar file that was not truncated for some classes (GH-99616)
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
This commit is contained in:
parent
cb60b6131b
commit
44892d45b0
|
@ -1890,7 +1890,10 @@ def save(self, filename=None, ignore_discard=False, ignore_expires=False):
|
|||
if self.filename is not None: filename = self.filename
|
||||
else: raise ValueError(MISSING_FILENAME_TEXT)
|
||||
|
||||
with os.fdopen(os.open(filename, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
|
||||
with os.fdopen(
|
||||
os.open(filename, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o600),
|
||||
'w',
|
||||
) as f:
|
||||
# There really isn't an LWP Cookies 2.0 format, but this indicates
|
||||
# that there is extra information in here (domain_dot and
|
||||
# port_spec) while still being compatible with libwww-perl, I hope.
|
||||
|
@ -2081,7 +2084,10 @@ def save(self, filename=None, ignore_discard=False, ignore_expires=False):
|
|||
if self.filename is not None: filename = self.filename
|
||||
else: raise ValueError(MISSING_FILENAME_TEXT)
|
||||
|
||||
with os.fdopen(os.open(filename, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
|
||||
with os.fdopen(
|
||||
os.open(filename, os.O_CREAT | os.O_WRONLY | os.O_TRUNC, 0o600),
|
||||
'w',
|
||||
) as f:
|
||||
f.write(NETSCAPE_HEADER_TEXT)
|
||||
now = time.time()
|
||||
for cookie in self:
|
||||
|
|
|
@ -397,6 +397,32 @@ def test_mozilla_filepermissions(self):
|
|||
finally:
|
||||
os_helper.unlink(filename)
|
||||
|
||||
@unittest.skipIf(mswindows, "windows file permissions are incompatible with file modes")
|
||||
@os_helper.skip_unless_working_chmod
|
||||
def test_cookie_files_are_truncated(self):
|
||||
filename = os_helper.TESTFN
|
||||
for cookiejar_class in (LWPCookieJar, MozillaCookieJar):
|
||||
c = cookiejar_class(filename)
|
||||
|
||||
req = urllib.request.Request("http://www.acme.com/")
|
||||
headers = ["Set-Cookie: pll_lang=en; Max-Age=31536000; path=/"]
|
||||
res = FakeResponse(headers, "http://www.acme.com/")
|
||||
c.extract_cookies(res, req)
|
||||
self.assertEqual(len(c), 1)
|
||||
|
||||
try:
|
||||
# Save the first version with contents:
|
||||
c.save()
|
||||
# Now, clear cookies and re-save:
|
||||
c.clear()
|
||||
c.save()
|
||||
# Check that file was truncated:
|
||||
c.load()
|
||||
finally:
|
||||
os_helper.unlink(filename)
|
||||
|
||||
self.assertEqual(len(c), 0)
|
||||
|
||||
def test_bad_magic(self):
|
||||
# OSErrors (eg. file doesn't exist) are allowed to propagate
|
||||
filename = os_helper.TESTFN
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix ``.save()`` method for ``LWPCookieJar`` and ``MozillaCookieJar``: saved
|
||||
file was not truncated on repeated save.
|
Loading…
Reference in a new issue