summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendan Walker <brendan.walker@pelotoncycle.com>2017-02-13 14:51:12 -0500
committerBrendan Walker <brendan.walker@pelotoncycle.com>2017-02-13 14:53:40 -0500
commit31be6ae6be5bc6c41cb0cfcf7ac336ce964bb8d7 (patch)
treedbf341286b66829aa04e7ccc34c469ad6e52b971
parent14d7a0c0a09e06d7953d9f05d82ff6e56c51effb (diff)
downloadpymemcache-31be6ae6be5bc6c41cb0cfcf7ac336ce964bb8d7.tar.gz
Raising MemcacheIllegalInputError when a key contains null byte, new line, or carriage return
-rw-r--r--pymemcache/client/base.py8
-rw-r--r--pymemcache/test/test_client.py29
2 files changed, 36 insertions, 1 deletions
diff --git a/pymemcache/client/base.py b/pymemcache/client/base.py
index 60b9f2a..a842455 100644
--- a/pymemcache/client/base.py
+++ b/pymemcache/client/base.py
@@ -96,6 +96,14 @@ def _check_key(key, allow_unicode_keys, key_prefix=b''):
raise MemcacheIllegalInputError(
"Key contains space and/or newline: '%r'" % (key,)
)
+ if b'\00' in key:
+ raise MemcacheIllegalInputError(
+ "Key contains null byte: '%r'" % (key,)
+ )
+ if b'\r\n' in key:
+ raise MemcacheIllegalInputError(
+ "Key contains carriage return: '%r'" % (key,)
+ )
if len(key) > 250:
raise MemcacheIllegalInputError("Key is too long: '%r'" % (key,))
return key
diff --git a/pymemcache/test/test_client.py b/pymemcache/test/test_client.py
index ea7b044..05e29a0 100644
--- a/pymemcache/test/test_client.py
+++ b/pymemcache/test/test_client.py
@@ -132,6 +132,33 @@ class ClientTestMixin(object):
with pytest.raises(MemcacheIllegalInputError):
_set()
+ def test_set_key_with_space(self):
+ client = self.make_client([b''])
+
+ def _set():
+ client.set(b'key has space', b'value', noreply=False)
+
+ with pytest.raises(MemcacheIllegalInputError):
+ _set()
+
+ def test_set_key_with_newline(self):
+ client = self.make_client([b''])
+
+ def _set():
+ client.set(b'key\n', b'value', noreply=False)
+
+ with pytest.raises(MemcacheIllegalInputError):
+ _set()
+
+ def test_set_key_with_carriage_return(self):
+ client = self.make_client([b''])
+
+ def _set():
+ client.set(b'key\r\n', b'value', noreply=False)
+
+ with pytest.raises(MemcacheIllegalInputError):
+ _set()
+
def test_set_unicode_char_in_middle_of_key_ok(self):
client = self.make_client([b'STORED\r\n'], allow_unicode_keys=True)
@@ -664,7 +691,7 @@ class TestClient(ClientTestMixin, unittest.TestCase):
with pytest.raises(MemcacheClientError):
client.get(u'\u0FFF'*150)
- def test_key_contains_spae(self):
+ def test_key_contains_space(self):
client = self.make_client([b'END\r\n'])
with pytest.raises(MemcacheClientError):
client.get(b'abc xyz')