mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
Fixed #28500 -- Fixed crash in FileBasedCache._is_expired() if the cache file is empty.
This commit is contained in:
5
django/core/cache/backends/filebased.py
vendored
5
django/core/cache/backends/filebased.py
vendored
@@ -116,7 +116,10 @@ class FileBasedCache(BaseCache):
|
||||
"""
|
||||
Take an open cache file `f` and delete it if it's expired.
|
||||
"""
|
||||
exp = pickle.load(f)
|
||||
try:
|
||||
exp = pickle.load(f)
|
||||
except EOFError:
|
||||
exp = 0 # An empty file is considered expired.
|
||||
if exp is not None and exp < time.time():
|
||||
f.close() # On Windows a file has to be closed before deleting
|
||||
self._delete(f.name)
|
||||
|
||||
7
tests/cache/tests.py
vendored
7
tests/cache/tests.py
vendored
@@ -1366,6 +1366,13 @@ class FileBasedCacheTests(BaseCacheTests, TestCase):
|
||||
with self.assertRaises(IOError):
|
||||
cache.get('foo')
|
||||
|
||||
def test_empty_cache_file_considered_expired(self):
|
||||
cache_file = cache._key_to_file('foo')
|
||||
with open(cache_file, 'wb') as fh:
|
||||
fh.write(b'')
|
||||
with open(cache_file, 'rb') as fh:
|
||||
self.assertIs(cache._is_expired(fh), True)
|
||||
|
||||
|
||||
@override_settings(CACHES={
|
||||
'default': {
|
||||
|
||||
Reference in New Issue
Block a user