diff options
author | Brendan Walker <brendan.walker@pelotoncycle.com> | 2017-02-14 18:47:09 -0500 |
---|---|---|
committer | Brendan Walker <brendan.walker@pelotoncycle.com> | 2017-02-14 18:47:09 -0500 |
commit | eae693f317eef5e3e18087071bf5749e4566eedb (patch) | |
tree | 3d950364f830c18d6b83dd122aee5bf1c98090d0 | |
parent | a91f0b108732a993340c52a2f63eb635547ef2c9 (diff) | |
download | pymemcache-eae693f317eef5e3e18087071bf5749e4566eedb.tar.gz |
Iterating over characters in key once
-rw-r--r-- | pymemcache/client/base.py | 31 | ||||
-rw-r--r-- | pymemcache/test/test_client.py | 2 |
2 files changed, 20 insertions, 13 deletions
diff --git a/pymemcache/client/base.py b/pymemcache/client/base.py index a842455..7b365f0 100644 --- a/pymemcache/client/base.py +++ b/pymemcache/client/base.py @@ -92,20 +92,27 @@ def _check_key(key, allow_unicode_keys, key_prefix=b''): except (UnicodeEncodeError, UnicodeDecodeError): raise MemcacheIllegalInputError("Non-ASCII key: '%r'" % (key,)) key = key_prefix + key - if b' ' in key or b'\n' in key: - 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,)) + + for c in key: + if c == b' ': + raise MemcacheIllegalInputError( + "Key contains space: '%r'" % (key,) + ) + elif c == b'\n': + raise MemcacheIllegalInputError( + "Key contains newline: '%r'" % (key,) + ) + elif c == b'\00': + raise MemcacheIllegalInputError( + "Key contains null byte: '%r'" % (key,) + ) + elif c == b'\r': + raise MemcacheIllegalInputError( + "Key contains carriage return: '%r'" % (key,) + ) return key diff --git a/pymemcache/test/test_client.py b/pymemcache/test/test_client.py index 329562c..8d17411 100644 --- a/pymemcache/test/test_client.py +++ b/pymemcache/test/test_client.py @@ -576,7 +576,7 @@ class TestClient(ClientTestMixin, unittest.TestCase): client = self.make_client([b'']) def _set(): - client.set(b'key\r\n', b'value', noreply=False) + client.set(b'key\r', b'value', noreply=False) with pytest.raises(MemcacheIllegalInputError): _set() |