From 1590b082d5a57faae567ae45d9eb6f9cd0e3607a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 18 Jan 2016 09:52:40 -0500 Subject: [PATCH] os/bluestore: fix _key_decode_u64 error checks The data that follows may be binary encoded and null. Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 98dc7fa85f91e..304a02ac936d9 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -345,20 +345,17 @@ static int get_key_object(const string& key, ghobject_t *oid) int r; const char *p = key.c_str(); - p = _key_decode_shard(p, &oid->shard_id); - if (!*p) + if (key.length() < 2 + 8 + 4) return -2; + p = _key_decode_shard(p, &oid->shard_id); uint64_t pool; p = _key_decode_u64(p, &pool); - if (!*p) - return -3; oid->hobj.pool = pool - 0x8000000000000000ull; unsigned hash; p = _key_decode_u32(p, &hash); - if (!*p) - return -4; + oid->hobj.set_bitwise_key_u32(hash); if (*p != '.') return -5; @@ -395,8 +392,6 @@ static int get_key_object(const string& key, ghobject_t *oid) } p = _key_decode_u64(p, &oid->hobj.snap.val); - if (!*p) - return -11; p = _key_decode_u64(p, &oid->generation); if (*p) { // if we get something other than a null terminator here, -- 2.39.5