From 0abfd74033ab97f7931a707f2a527bebf1a4cbdc Mon Sep 17 00:00:00 2001 From: matt benjamin Date: Fri, 16 May 2025 12:02:20 -0400 Subject: [PATCH] rgw: defensive fix for crash attemping part-copy of '%' versioned obj The proximate cause of the issue actually appears to be in recognizing the key.name of the object, only failing in rgw_rados due to an assert on key.name being non-empty. Resolves: rhbz#2356922 Signed-off-by: matt benjamin (cherry picked from commit 5111b625a174aa2eaeb4be943dec9fe4b9d948af) Signed-off-by: Matt Benjamin --- src/rgw/driver/rados/rgw_rados.cc | 1 + src/rgw/rgw_op.cc | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index 1922202ef93..8ab13b3124f 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -259,6 +259,7 @@ void RGWObjectCtx::set_atomic(const rgw_obj& obj, bool atomic) { assert (!obj.empty()); objs_state[obj].state.is_atomic = atomic; } + void RGWObjectCtx::set_prefetch_data(const rgw_obj& obj) { std::unique_lock wl{lock}; assert (!obj.empty()); diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 15f241ffc19..6ae80e55d5d 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -4117,7 +4117,8 @@ int RGWPutObj::init_processing(optional_yield y) { int RGWPutObj::verify_permission(optional_yield y) { - if (! copy_source.empty()) { + if (! (copy_source.empty() || + copy_source_object_name.empty())) { RGWAccessControlPolicy cs_acl; boost::optional policy; -- 2.47.3