From: Haomai Wang Date: Thu, 20 Nov 2014 03:03:17 +0000 (+0800) Subject: KeyValueStore: Fix parse_header_key X-Git-Tag: v0.90~54^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F2966%2Fhead;p=ceph.git KeyValueStore: Fix parse_header_key Signed-off-by: Haomai Wang --- diff --git a/src/os/GenericObjectMap.cc b/src/os/GenericObjectMap.cc index 0255df76089b1..1b08ed207bd3e 100644 --- a/src/os/GenericObjectMap.cc +++ b/src/os/GenericObjectMap.cc @@ -224,7 +224,10 @@ bool GenericObjectMap::parse_header_key(const string &long_name, return false; current = ++end; - for ( ; end != long_name.end() && *end != GHOBJECT_KEY_SEP_C; ++end) ; + for ( ; end != long_name.end() && *end != GHOBJECT_KEY_SEP_C && *end != GHOBJECT_KEY_ENDING; ++end) ; + if (*end == long_name.end()) + return false; + string snap_str(current, end); if (snap_str == "head") snap = CEPH_NOSNAP; @@ -235,18 +238,18 @@ bool GenericObjectMap::parse_header_key(const string &long_name, // Optional generation/shard_id string genstring, shardstring; - if (end != long_name.end()) { + if (*end != GHOBJECT_KEY_ENDING) { current = ++end; for ( ; end != long_name.end() && *end != GHOBJECT_KEY_SEP_C; ++end) ; - if (end == long_name.end()) + if (end != GHOBJECT_KEY_SEP_C) return false; genstring = string(current, end); generation = (gen_t)strtoull(genstring.c_str(), NULL, 16); current = ++end; - for ( ; end != long_name.end() && *end != GHOBJECT_KEY_SEP_C; ++end) ; - if (end != long_name.end()) + for ( ; end != long_name.end() && *end != GHOBJECT_KEY_ENDING; ++end) ; + if (end == long_name.end()) return false; shardstring = string(current, end);