X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Ffetch.c;h=3c819f38e00392ffa3ac21c2759edb6fdd66338b;hb=4aa2f33b41edf38fcab43010e9e57bf0a512d240;hp=7baac5449510a99b763e3fce4f9c0e8c0b7ebc90;hpb=55b5455291498ef63c1c34976552d58708a74732;p=m6w6%2Flibmemcached diff --git a/libmemcached/fetch.c b/libmemcached/fetch.c index 7baac544..3c819f38 100644 --- a/libmemcached/fetch.c +++ b/libmemcached/fetch.c @@ -26,14 +26,18 @@ char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length, if (key) { - strncpy(key, result_buffer->key, result_buffer->key_length); + if (result_buffer->key_length > MEMCACHED_MAX_KEY) + { + *error= MEMCACHED_KEY_TOO_BIG; + *value_length= 0; + + return NULL; + } + strncpy(key, result_buffer->item_key, result_buffer->key_length); // For the binary protocol we will cut off the key :( *key_length= result_buffer->key_length; } - if (result_buffer->flags) - *flags= result_buffer->flags; - else - *flags= 0; + *flags= result_buffer->item_flags; return memcached_string_c_copy(&result_buffer->value); } @@ -54,7 +58,7 @@ memcached_result_st *memcached_fetch_result(memcached_st *ptr, if ((result= memcached_result_create(ptr, NULL)) == NULL) return NULL; - while ((server = memcached_io_get_readable_server(ptr)) != NULL) + while ((server= memcached_io_get_readable_server(ptr)) != NULL) { char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE]; *error= memcached_response(server, buffer, sizeof(buffer), result); @@ -87,13 +91,12 @@ memcached_return_t memcached_fetch_execute(memcached_st *ptr, { memcached_result_st *result= &ptr->result; memcached_return_t rc= MEMCACHED_FAILURE; - unsigned int x; while ((result= memcached_fetch_result(ptr, result, &rc)) != NULL) { if (rc == MEMCACHED_SUCCESS) { - for (x= 0; x < number_of_callbacks; x++) + for (uint32_t x= 0; x < number_of_callbacks; x++) { rc= (*callback[x])(ptr, result, context); if (rc != MEMCACHED_SUCCESS)