]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
KeyValueStore: Fix parse_header_key 2966/head
authorHaomai Wang <haomaiwang@gmail.com>
Thu, 20 Nov 2014 03:03:17 +0000 (11:03 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Thu, 20 Nov 2014 03:03:17 +0000 (11:03 +0800)
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/os/GenericObjectMap.cc

index 0255df76089b1a0ea6525de0875570cda43a41af..1b08ed207bd3e9bc6e4d1b32d607f85884cddb0a 100644 (file)
@@ -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);