X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=lib%2Fmemcached_response.c;h=076b0a6fc2bd67a49c3d5d22e50f9405102c0553;hb=82a0e8be2e1002c6f173baf7c2dfdbb281ee2136;hp=10547504743c476956ade3a7a5ebfe664f44aa4c;hpb=d6505b16fb85f77527934510d0395adfcbb66377;p=m6w6%2Flibmemcached diff --git a/lib/memcached_response.c b/lib/memcached_response.c index 10547504..076b0a6f 100644 --- a/lib/memcached_response.c +++ b/lib/memcached_response.c @@ -18,12 +18,12 @@ memcached_return memcached_response(memcached_st *ptr, unsigned int max_messages; - memset(buffer, 0, buffer_length); send_length= 0; max_messages= memcached_server_response_count(ptr, server_key); for (x= 0; x <= max_messages; x++) { + size_t total_length= 0; buffer_ptr= buffer; while (1) @@ -40,7 +40,15 @@ memcached_return memcached_response(memcached_st *ptr, break; else buffer_ptr++; + + total_length++; + WATCHPOINT_ASSERT(total_length < buffer_length); + + if (total_length >= buffer_length) + return MEMCACHED_PROTOCOL_ERROR; } + buffer_ptr++; + *buffer_ptr= 0; if (memcached_server_response_count(ptr, server_key)) memcached_server_response_decrement(ptr, server_key); @@ -48,7 +56,7 @@ memcached_return memcached_response(memcached_st *ptr, switch(buffer[0]) { - case 'V': /* VALUE */ + case 'V': /* VALUE || VERSION */ return MEMCACHED_SUCCESS; case 'O': /* OK */ return MEMCACHED_SUCCESS; @@ -92,3 +100,15 @@ memcached_return memcached_response(memcached_st *ptr, return MEMCACHED_SUCCESS; } + +char *memcached_result_value(memcached_result_st *ptr) +{ + memcached_string_st *sptr= &ptr->value; + return memcached_string_value(sptr); +} + +size_t memcached_result_length(memcached_result_st *ptr) +{ + memcached_string_st *sptr= &ptr->value; + return memcached_string_length(sptr); +}