From: xie xingguo Date: Wed, 13 Jan 2016 08:59:47 +0000 (+0800) Subject: BlueStore: fix wrong verification of object key X-Git-Tag: v10.0.3~42^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=635bda363071dad9f89436cab15fd52bf2678c09;p=ceph.git BlueStore: fix wrong verification of object key Fixes: #14353 Signed-off-by: xie xingguo --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 29ed6a45ec7e..8c0b71637baf 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -346,18 +346,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 - 0x8000000000000000; + 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 != '.') @@ -395,11 +395,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; }