]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kstore: fix wrong verification logic of object key 7213/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Wed, 13 Jan 2016 08:52:52 +0000 (16:52 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Wed, 13 Jan 2016 09:26:28 +0000 (17:26 +0800)
Fixes: #14352
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/kstore/KStore.cc

index 18a89e5192decd632f41aa34ddd86bc0c2a9e267..48063f63e57e509b846bd176ca2b068fb25b25ce 100644 (file)
@@ -302,18 +302,18 @@ static int get_key_object(const string& key, ghobject_t *oid)
   const char *p = key.c_str();
 
   p = _key_decode_shard(p, &oid->shard_id);
-  if (!p)
+  if (!*p)
     return -2;
 
   uint64_t pool;
   p = _key_decode_u64(p, &pool);
-  if (!p)
+  if (!*p)
     return -3;
   oid->hobj.pool = pool - 0x8000000000000000ull;
 
   unsigned hash;
   p = _key_decode_u32(p, &hash);
-  if (!p)
+  if (!*p)
     return -4;
   oid->hobj.set_bitwise_key_u32(hash);
   if (*p != '.')
@@ -351,11 +351,15 @@ static int get_key_object(const string& key, ghobject_t *oid)
   }
 
   p = _key_decode_u64(p, &oid->hobj.snap.val);
-  if (!p)
+  if (!*p)
     return -11;
   p = _key_decode_u64(p, &oid->generation);
-  if (!p)
+  if (*p) {
+    // if we get something other than a null terminator here, 
+    // something goes wrong.
     return -12;
+  }
+
   return 0;
 }