]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix crash when listing objects via swift 14530/head
authorYehuda Sadeh <yehuda@redhat.com>
Wed, 8 Mar 2017 22:52:34 +0000 (14:52 -0800)
committerNathan Cutler <ncutler@suse.com>
Mon, 3 Jul 2017 10:50:06 +0000 (12:50 +0200)
Fixes: http://tracker.ceph.com/issues/19249
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
(cherry picked from commit a9ec5e8ce184e19c009863db4d3519f9d8af91bd)

Conflicts:
        src/rgw/rgw_rest_swift.cc ("key" element of RGWObjEnt struct
           is not a reference; fix)

src/rgw/rgw_rest_swift.cc

index 887b4c7e6d87eaf1121e566fbd3445f4ef44b8bb..5442b9479116fd0fbc07b3687c5512d10d891403 100644 (file)
@@ -282,15 +282,18 @@ void RGWListBucket_ObjStore_SWIFT::send_response()
   while (iter != objs.end() || pref_iter != common_prefixes.end()) {
     bool do_pref = false;
     bool do_objs = false;
-    rgw_obj_key& key = iter->key;
+    rgw_obj_key key;
+    if (iter != objs.end()) {
+      key = iter->key;
+    }
     if (pref_iter == common_prefixes.end())
       do_objs = true;
     else if (iter == objs.end())
       do_pref = true;
-    else if (key.name.compare(pref_iter->first) == 0) {
+    else if (!key.empty() && key.name.compare(pref_iter->first) == 0) {
       do_objs = true;
       ++pref_iter;
-    } else if (key.name.compare(pref_iter->first) <= 0)
+    } else if (!key.empty() && key.name.compare(pref_iter->first) <= 0)
       do_objs = true;
     else
       do_pref = true;