]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: url_decode before parsing copysource in copyobject
authorPaul Reece <paul@servercloud.com>
Thu, 1 Jul 2021 03:17:02 +0000 (23:17 -0400)
committerCory Snyder <csnyder@iland.com>
Wed, 16 Mar 2022 16:38:09 +0000 (12:38 -0400)
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 <paul@servercloud.com>
(cherry picked from commit b7621625ed69f21a5bf701b3385ddee281ff3715)

src/rgw/rgw_op.cc

index f022bc376f9319d55ce834b59f36ceab0269a216..17f7052b3d6c01892a28450686696e2f6944d99f 100644 (file)
@@ -4978,12 +4978,12 @@ bool RGWCopyObj::parse_copy_location(const std::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;