summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Box <malcolm@tellybug.com>2014-04-23 12:06:23 +0100
committerClaude Paroz <claude@2xlibre.net>2014-04-23 14:56:54 +0200
commit07235aec9d0853b4fa58629c572912786b6270c9 (patch)
treed73f701a321a188fe461e690fe297b34bcc2c211
parente192f131033d68e1b018263aee6fe8804a923b22 (diff)
[1.7.x] Fixed #22495 -- Locmem cache.add() failed with infinite timeouts
cache.add() incorrectly succeeded when there was an existing key with an infinite (None) timeout. Backport of af5f688392 from master.
-rw-r--r--django/core/cache/backends/locmem.py4
-rw-r--r--tests/cache/tests.py3
2 files changed, 5 insertions, 2 deletions
diff --git a/django/core/cache/backends/locmem.py b/django/core/cache/backends/locmem.py
index 73b02a55b3..aba8b61a4d 100644
--- a/django/core/cache/backends/locmem.py
+++ b/django/core/cache/backends/locmem.py
@@ -29,8 +29,8 @@ class LocMemCache(BaseCache):
self.validate_key(key)
pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)
with self._lock.writer():
- exp = self._expire_info.get(key)
- if exp is None or exp <= time.time():
+ exp = self._expire_info.get(key, 0)
+ if exp is not None and exp <= time.time():
self._set(key, pickled, timeout)
return True
return False
diff --git a/tests/cache/tests.py b/tests/cache/tests.py
index c93bcd816a..a9f5927c83 100644
--- a/tests/cache/tests.py
+++ b/tests/cache/tests.py
@@ -491,6 +491,9 @@ class BaseCacheTests(object):
cache.add('key2', 'ham', None)
self.assertEqual(cache.get('key2'), 'ham')
+ added = cache.add('key1', 'new eggs', None)
+ self.assertEqual(added, False)
+ self.assertEqual(cache.get('key1'), 'eggs')
cache.set_many({'key3': 'sausage', 'key4': 'lobster bisque'}, None)
self.assertEqual(cache.get('key3'), 'sausage')