Fix for zero length values.
author <brian@gir-2.local> <>
Wed, 5 Mar 2008 20:30:00 +0000 (15:30 -0500)
committer <brian@gir-2.local> <>
Wed, 5 Mar 2008 20:30:00 +0000 (15:30 -0500)
ChangeLog
lib/memcached_fetch.c
lib/memcached_io.c
lib/memcached_string.c
tests/function.c

index 46c15ea9e2555a034274f50362419b7e872e431c..1d199b27952d5a1c4af1ba9c37354f9c2ff08488 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 0.17
   * MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT added for connect timeout in
     non-block mode.
+  * Fix plus tests for non-zero value objects and flags.
 
 0.16 Mon Feb 18 00:30:25 PST 2008
   * Work on the UDP protocol
index 96363684ea4b09fc2abba900a2c023b3594ebed1..37cec5d30366a857b9e99f7e7424170a5ff75326 100644 (file)
@@ -159,6 +159,8 @@ char *memcached_fetch(memcached_st *ptr, char *key, size_t *key_length,
 
       if (result_buffer->flags)
         *flags= result_buffer->flags;
+      else
+        *flags= 0;
 
       return  memcached_string_c_copy(&result_buffer->value);
     }
index 3b5b25afa026bfb5abdce9e047746aca509382cb..b9261f3d9bc4ef27540f5799e702a538032aca31 100644 (file)
@@ -119,7 +119,6 @@ ssize_t memcached_io_read(memcached_server_st *ptr,
         }
         else
         {
-          WATCHPOINT_ASSERT(0);
           found_eof= 1;
           break;
         }
index ad396118b2b878ba9ab938e9c412defadafdf648..1595ec6108b9f00b69ea3293de0cabeeb847e32f 100644 (file)
@@ -140,6 +140,9 @@ char *memcached_string_c_copy(memcached_string_st *string)
 
   WATCHPOINT_ASSERT(string->is_allocated != MEMCACHED_USED);
 
+  if (memcached_string_length(string) == 0)
+    return NULL;
+
   if (string->root->call_malloc)
     c_ptr= (char *)string->root->call_malloc(string->root, (memcached_string_length(string)+1) * sizeof(char));
   else
index 6bbaa40cda65de55d7db262ae79c1abbaefc0f12..dd3af2accbf9b5d4b972916bbc28220c60cea53e 100644 (file)
@@ -1837,6 +1837,46 @@ uint8_t user_supplied_bug14(memcached_st *memc)
   return 0;
 }
 
+/*
+  Look for zero length value problems
+  */
+uint8_t user_supplied_bug15(memcached_st *memc)
+{
+  uint32_t x;
+  memcached_return rc;
+  char *key= "mykey";
+  char *value;
+  size_t length;
+  uint32_t flags;
+
+  for (x= 0; x < 2; x++)
+  {
+    rc= memcached_set(memc, key, strlen(key), 
+                      NULL, 0,
+                      (time_t)0, (uint32_t)0);
+
+    assert(rc == MEMCACHED_SUCCESS);
+
+    value= memcached_get(memc, key, strlen(key),
+                         &length, &flags, &rc);
+
+    assert(rc == MEMCACHED_SUCCESS);
+    assert(value == NULL);
+    assert(length == 0);
+    assert(flags == 0);
+
+    value= memcached_get(memc, key, strlen(key),
+                         &length, &flags, &rc);
+
+    assert(rc == MEMCACHED_SUCCESS);
+    assert(value == NULL);
+    assert(length == 0);
+    assert(flags == 0);
+  }
+
+  return 0;
+}
+
 uint8_t result_static(memcached_st *memc)
 {
   memcached_result_st result;
@@ -2480,6 +2520,7 @@ test_st user_tests[] ={
   {"user_supplied_bug12", 1, user_supplied_bug12 },
   {"user_supplied_bug13", 1, user_supplied_bug13 },
   {"user_supplied_bug14", 1, user_supplied_bug14 },
+  {"user_supplied_bug15", 1, user_supplied_bug15 },
   {0, 0, 0}
 };