Code

Ticket #9180: 9180.diff

File 9180.diff, 1.7 KB (added by AdamG, 6 years ago)

Patch that fixes this issue, is backwards-compatible & includes a regression test

Line 
1diff -r 3b67f41e85b7 django/core/cache/backends/memcached.py
2--- a/django/core/cache/backends/memcached.py   Thu Oct 09 09:30:54 2008 +0000
3+++ b/django/core/cache/backends/memcached.py   Tue Oct 14 09:30:10 2008 -0400
4@@ -1,7 +1,7 @@
5 "Memcached cache backend"
6 
7 from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError
8-from django.utils.encoding import smart_unicode, smart_str
9+from django.utils.encoding import smart_unicode, smart_str, DjangoUnicodeDecodeError
10 
11 try:
12     import cmemcache as memcache
13@@ -27,7 +27,10 @@
14             return default
15         else:
16             if isinstance(val, basestring):
17-                return smart_unicode(val)
18+                try:
19+                    return smart_unicode(val)
20+                except DjangoUnicodeDecodeError:
21+                    return val
22             else:
23                 return val
24 
25diff -r 3b67f41e85b7 tests/regressiontests/cache/tests.py
26--- a/tests/regressiontests/cache/tests.py      Thu Oct 09 09:30:54 2008 +0000
27+++ b/tests/regressiontests/cache/tests.py      Tue Oct 14 09:30:10 2008 -0400
28@@ -21,6 +21,10 @@
29 class C:
30     def m(n):
31         return 24
32+
33+# The simplest possible GIF: a 43-byte, 1x1-pixel transparent image
34+EMPTY_GIF_BYTES = 'GIF89a\x01\x00\x01\x00\xf0\x00\x00\xb0\x8cZ\x00\x00\x00!\xf9\x04\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;'
35+
36 
37 class Cache(unittest.TestCase):
38     def test_simple(self):
39@@ -105,6 +109,10 @@
40             cache.set(key, value)
41             self.assertEqual(cache.get(key), value)
42 
43+    def test_binary(self):
44+        cache.set("binary_stuff", EMPTY_GIF_BYTES)
45+        self.assertEqual(cache.get("binary_stuff"), EMPTY_GIF_BYTES)
46+
47 
48 class FileBasedCacheTests(unittest.TestCase):
49     """