]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix decoding + characters in URL
authordevicenull <dn@devicenull.org>
Fri, 18 Jul 2014 14:25:51 +0000 (10:25 -0400)
committerYehuda Sadeh <yehuda@redhat.com>
Sat, 2 Aug 2014 20:19:17 +0000 (13:19 -0700)
Fixes: #8702
Backport: firefly

Only decode + characters to spaces if we're in a query argument. The +
query argument.  The + => ' ' translation is not correct for
file/directory names.

Resolves http://tracker.ceph.com/issues/8702

Reviewed-by: Yehuda Sadeh <yehuda@redhat.com>
Signed-off-by: Brian Rak <dn@devicenull.org>
(cherry picked from commit 4a63396ba1611ed36cccc8c6d0f5e6e3e13d83ee)

src/rgw/rgw_common.cc

index 58913ccbaf0ddfbf9f4201f69490be0253ef2814..5a1043f31f20ccd41dfc8deea08a2ab5ec96a35f 100644 (file)
@@ -697,13 +697,15 @@ bool url_decode(string& src_str, string& dest_str)
   int pos = 0;
   char c;
 
+  bool in_query = false;
   while (*src) {
     if (*src != '%') {
-      if (*src != '+') {
-       dest[pos++] = *src++;
+      if (!in_query || *src != '+') {
+        if (*src == '?') in_query = true;
+        dest[pos++] = *src++;
       } else {
-       dest[pos++] = ' ';
-       ++src;
+        dest[pos++] = ' ';
+        ++src;
       }
     } else {
       src++;