From 5177759cd17ec619ceae67b8c4a64bbc0f204139 Mon Sep 17 00:00:00 2001 From: Haomai Wang Date: Thu, 20 Nov 2014 11:03:17 +0800 Subject: [PATCH] KeyValueStore: Fix parse_header_key Signed-off-by: Haomai Wang --- src/os/GenericObjectMap.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) 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); -- 2.39.5