summaryrefslogtreecommitdiff
path: root/pymemcache/test
diff options
context:
space:
mode:
authorNicholas Charriere <nicholas@pinterest.com>2016-10-03 11:31:17 -0700
committerNicholas Charriere <nicholas@pinterest.com>2016-10-03 14:31:14 -0700
commita1bf081754cd38de1a20925782a5404de00bd46d (patch)
treeb5a0b47a33455bd50ba924724925ee51e3fd350a /pymemcache/test
parentdcd9f5b51bfa7c1afba5191f7be95c7109f9e224 (diff)
downloadpymemcache-fix-unicode-char-in-middle-error.tar.gz
Fix #117, illegal unicode character in middle of key (or value now)fix-unicode-char-in-middle-error
Add .python-version to .gitignore (for pyenv)
Diffstat (limited to 'pymemcache/test')
-rw-r--r--pymemcache/test/test_client.py9
-rw-r--r--pymemcache/test/utils.py15
2 files changed, 24 insertions, 0 deletions
diff --git a/pymemcache/test/test_client.py b/pymemcache/test/test_client.py
index 530f4c1..6d658f5 100644
--- a/pymemcache/test/test_client.py
+++ b/pymemcache/test/test_client.py
@@ -92,6 +92,15 @@ class ClientTestMixin(object):
with pytest.raises(MemcacheIllegalInputError):
_set()
+ def test_set_unicode_char_in_middle_of_key(self):
+ client = self.make_client([b'STORED\r\n'])
+
+ def _set():
+ client.set('helloworld_\xb1901520_%c3', b'value', noreply=False)
+
+ with pytest.raises(MemcacheIllegalInputError):
+ _set()
+
def test_set_unicode_value(self):
client = self.make_client([b''])
diff --git a/pymemcache/test/utils.py b/pymemcache/test/utils.py
index f2c5a80..4414031 100644
--- a/pymemcache/test/utils.py
+++ b/pymemcache/test/utils.py
@@ -43,6 +43,11 @@ class MockMemcacheClient(object):
def get(self, key, default=None):
if isinstance(key, six.text_type):
raise MemcacheIllegalInputError(key)
+ if isinstance(key, six.string_types):
+ try:
+ key = key.encode('ascii')
+ except (UnicodeEncodeError, UnicodeDecodeError):
+ raise MemcacheIllegalInputError
if key not in self._contents:
return default
@@ -71,6 +76,16 @@ class MockMemcacheClient(object):
raise MemcacheIllegalInputError(key)
if isinstance(value, six.text_type):
raise MemcacheIllegalInputError(value)
+ if isinstance(key, six.string_types):
+ try:
+ key = key.encode('ascii')
+ except (UnicodeEncodeError, UnicodeDecodeError):
+ raise MemcacheIllegalInputError
+ if isinstance(value, six.string_types):
+ try:
+ value = value.encode('ascii')
+ except (UnicodeEncodeError, UnicodeDecodeError):
+ raise MemcacheIllegalInputError
flags = 0
if self.serializer: