From a7c38a111021699f9c0307241ed663513af538be Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 8 Mar 2017 14:52:34 -0800 Subject: [PATCH] rgw: fix crash when listing objects via swift Fixes: http://tracker.ceph.com/issues/19249 Signed-off-by: Yehuda Sadeh (cherry picked from commit a9ec5e8ce184e19c009863db4d3519f9d8af91bd) Conflicts: src/rgw/rgw_rest_swift.cc (kraken does not have 5cf5ab470e6e9119ae4a6a6111974cb03610ba3e, so retain kraken rgw_obj_key& type) --- src/rgw/rgw_rest_swift.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index 887b4c7e6d87ea..15468d99412a72 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -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;