]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix accessing expired memory in PrefixableSignatureHelper. 17206/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 23 Aug 2017 19:31:11 +0000 (21:31 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 24 Aug 2017 13:52:34 +0000 (15:52 +0200)
Fixes: http://tracker.ceph.com/issues/21085
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/rgw/rgw_swift_auth.cc

index 525671c34b4ad0c96b3fb6eead805cad69157596..15dfe032b3aa3989c0b3abfda4729f18837dd226 100644 (file)
@@ -203,13 +203,17 @@ class TempURLEngine::PrefixableSignatureHelper
   const boost::optional<const std::string&> prefix;
 
 public:
-  PrefixableSignatureHelper(const std::string& decoded_uri,
+  PrefixableSignatureHelper(const std::string& _decoded_uri,
                            const std::string& object_name,
                             const boost::optional<const std::string&> prefix)
-    : decoded_uri(decoded_uri),
+    : decoded_uri(_decoded_uri),
       object_name(object_name),
       prefix(prefix) {
-    /* Transform: v1/acct/cont/obj - > v1/acct/cont/ */
+    /* Transform: v1/acct/cont/obj - > v1/acct/cont/
+     *
+     * NOTE(rzarzynski): we really want to substr() on boost::string_view,
+     * not std::string. Otherwise we would end with no_obj_uri referencing
+     * a temporary. */
     no_obj_uri = \
       decoded_uri.substr(0, decoded_uri.length() - object_name.length());
   }