From: Paul Reece Date: Thu, 1 Jul 2021 03:17:02 +0000 (-0400) Subject: rgw: url_decode before parsing copysource in copyobject X-Git-Tag: v15.2.17~84^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7f3311b1184dd0b7f5676b92da0df479c181e893;p=ceph.git rgw: url_decode before parsing copysource in copyobject If the copysource on copyobject call was URL-encoded, it would fail as it would not parse the '/' seperating bucket and key name URL encoding may be necessary for certain characters in a copysource, and several public examples show URL encoding the copysource Fixes: #43259 Signed-off-by: Paul Reece (cherry picked from commit b7621625ed69f21a5bf701b3385ddee281ff3715) --- diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index 2339dccb7fd..9b983d0c938 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -5007,12 +5007,12 @@ bool RGWCopyObj::parse_copy_location(const boost::string_view& url_src, if (dec_src[0] == '/') dec_src.remove_prefix(1); - pos = dec_src.find('/'); + pos = url_decode(dec_src).find('/'); if (pos == string::npos) return false; - bucket_name = url_decode(dec_src.substr(0, pos)); - key.name = url_decode(dec_src.substr(pos + 1)); + bucket_name = url_decode(dec_src).substr(0, pos); + key.name = url_decode(dec_src).substr(pos + 1); if (key.name.empty()) { return false;