diff options
author | Sean Reifschneider <jafo@tummy.com> | 2013-06-02 00:54:14 -0600 |
---|---|---|
committer | Sean Reifschneider <jafo@tummy.com> | 2013-06-02 00:54:14 -0600 |
commit | 6f6c0c54f7d4b9cfa1469bafe47c075d6a47f2d0 (patch) | |
tree | 86faea22be4a1884f7279d4bdcce9bd3bf090345 | |
parent | 207b314b2b776684b644ce86a46e2f6afcacbc4c (diff) | |
download | python-memcached-6f6c0c54f7d4b9cfa1469bafe47c075d6a47f2d0.tar.gz |
If Python <2.6, use regex to test keys.
-rw-r--r-- | memcache.py | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/memcache.py b/memcache.py index 832d528..68caf4a 100644 --- a/memcache.py +++ b/memcache.py @@ -77,7 +77,12 @@ try: except ImportError: from StringIO import StringIO -invalid_key_characters = ''.join(map(chr, range(33) + [127])) +avoid_string_translate = sys.version_info[:2] < (2, 6) +if avoid_string_translate: + import re + valid_key_chars_re = re.compile('[\x21-\x7e\x80-\xff]+$') +else: + invalid_key_characters = ''.join(map(chr, range(33) + [127])) # Original author: Evan Martin of Danga Interactive @@ -697,7 +702,8 @@ class Client(local): self._statlog('set_multi') - server_keys, prefixed_to_orig_key = self._map_and_prefix_keys(mapping.iterkeys(), key_prefix) + server_keys, prefixed_to_orig_key = self._map_and_prefix_keys( + mapping.iterkeys(), key_prefix) # send out all requests on each server before reading anything dead_servers = [] @@ -1046,10 +1052,15 @@ class Client(local): len(key) + key_extra_len > self.server_max_key_length: raise Client.MemcachedKeyLengthError("Key length is > %s" % self.server_max_key_length) - if len(key) != len(key.translate(None, invalid_key_characters)): - raise Client.MemcachedKeyCharacterError( - "Control characters not allowed") - + if avoid_string_translate: + if not valid_key_chars_re.match(key): + raise Client.MemcachedKeyCharacterError( + "Control characters not allowed") + else: + if len(key) != len( + key.translate(None, invalid_key_characters)): + raise Client.MemcachedKeyCharacterError( + "Control characters not allowed") class _Host(object): |