Fixed #16378. Locmem now uses pickle.HIGHEST_PROTOCOL for better compatibility with other hash backends. Thanks aaugustin for the initial patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17136 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
4d975b4f88
commit
0506facd86
|
@ -102,7 +102,8 @@ class DatabaseCache(BaseDatabaseCache):
|
||||||
exp = exp.replace(microsecond=0)
|
exp = exp.replace(microsecond=0)
|
||||||
if num > self._max_entries:
|
if num > self._max_entries:
|
||||||
self._cull(db, cursor, now)
|
self._cull(db, cursor, now)
|
||||||
encoded = base64.encodestring(pickle.dumps(value, 2)).strip()
|
pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)
|
||||||
|
encoded = base64.encodestring(pickled).strip()
|
||||||
cursor.execute("SELECT cache_key, expires FROM %s "
|
cursor.execute("SELECT cache_key, expires FROM %s "
|
||||||
"WHERE cache_key = %%s" % table, [key])
|
"WHERE cache_key = %%s" % table, [key])
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -31,7 +31,8 @@ class LocMemCache(BaseCache):
|
||||||
exp = self._expire_info.get(key)
|
exp = self._expire_info.get(key)
|
||||||
if exp is None or exp <= time.time():
|
if exp is None or exp <= time.time():
|
||||||
try:
|
try:
|
||||||
self._set(key, pickle.dumps(value), timeout)
|
pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)
|
||||||
|
self._set(key, pickled, timeout)
|
||||||
return True
|
return True
|
||||||
except pickle.PickleError:
|
except pickle.PickleError:
|
||||||
pass
|
pass
|
||||||
|
@ -49,7 +50,8 @@ class LocMemCache(BaseCache):
|
||||||
return default
|
return default
|
||||||
elif exp > time.time():
|
elif exp > time.time():
|
||||||
try:
|
try:
|
||||||
return pickle.loads(self._cache[key])
|
pickled = self._cache[key]
|
||||||
|
return pickle.loads(pickled)
|
||||||
except pickle.PickleError:
|
except pickle.PickleError:
|
||||||
return default
|
return default
|
||||||
finally:
|
finally:
|
||||||
|
@ -78,7 +80,8 @@ class LocMemCache(BaseCache):
|
||||||
self.validate_key(key)
|
self.validate_key(key)
|
||||||
self._lock.writer_enters()
|
self._lock.writer_enters()
|
||||||
try:
|
try:
|
||||||
self._set(key, pickle.dumps(value), timeout)
|
pickled = pickle.dumps(value, pickle.HIGHEST_PROTOCOL)
|
||||||
|
self._set(key, pickled, timeout)
|
||||||
except pickle.PickleError:
|
except pickle.PickleError:
|
||||||
pass
|
pass
|
||||||
finally:
|
finally:
|
||||||
|
|
|
@ -501,6 +501,10 @@ Django 1.4 also includes several smaller improvements worth noting:
|
||||||
* Changed the default value for ``httponly`` on session cookies to
|
* Changed the default value for ``httponly`` on session cookies to
|
||||||
``True`` to help reduce the impact of potential XSS attacks.
|
``True`` to help reduce the impact of potential XSS attacks.
|
||||||
|
|
||||||
|
* Changed the ``locmem`` cache backend to use
|
||||||
|
``pickle.HIGHEST_PROTOCOL`` for better compatibility with the other
|
||||||
|
cache backends.
|
||||||
|
|
||||||
.. _backwards-incompatible-changes-1.4:
|
.. _backwards-incompatible-changes-1.4:
|
||||||
|
|
||||||
Backwards incompatible changes in 1.4
|
Backwards incompatible changes in 1.4
|
||||||
|
|
Loading…
Reference in New Issue