From ed1af1f5b70f7da90f5e8d255df134a8ccf3f526 Mon Sep 17 00:00:00 2001 From: Date: Sun, 27 Jul 2008 04:00:37 -0700 Subject: [PATCH] Fix for zero length bad key fix. --- ChangeLog | 1 + libmemcached/memcached_key.c | 4 ++++ tests/function.c | 10 ++++++++++ 3 files changed, 15 insertions(+) diff --git a/ChangeLog b/ChangeLog index 47c4f76c..f047278e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ * Solaris 64bit fix. * Support for weighted Ketama from Yin Chen. * Fix for Chinese + * Fix for 0 length key to trigger bad key. 0.22 Mon Jul 14 09:24:11 PDT 2008 * Fix where master key was no being checked for "bad key" diff --git a/libmemcached/memcached_key.c b/libmemcached/memcached_key.c index 4ea63919..7513592b 100644 --- a/libmemcached/memcached_key.c +++ b/libmemcached/memcached_key.c @@ -8,6 +8,10 @@ memcached_return memcachd_key_test(char **keys, size_t *key_length, for (x= 0; x < number_of_keys; x++) { int y; + + if (*(key_length + x) == 0) + return MEMCACHED_BAD_KEY_PROVIDED; + for (y= 0; y < *(key_length + x); y++) { if ((isgraph(keys[x][y])) == 0) diff --git a/tests/function.c b/tests/function.c index b0fc1fd8..0b2c15d4 100644 --- a/tests/function.c +++ b/tests/function.c @@ -630,6 +630,16 @@ test_return bad_key_test(memcached_st *memc) assert(rc == MEMCACHED_BAD_KEY_PROVIDED); } + /* Make sure zero length keys are marked as bad */ + set= 1; + rc= memcached_behavior_set(clone, MEMCACHED_BEHAVIOR_VERIFY_KEY, set); + assert(rc == MEMCACHED_SUCCESS); + string= memcached_get(clone, key, 0, + &string_length, &flags, &rc); + assert(rc == MEMCACHED_BAD_KEY_PROVIDED); + assert(string_length == 0); + assert(!string); + memcached_free(clone); return 0; -- 2.30.2