]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kv/KeyValueDB: return const char* from MergeOperator::name() 23477/head
authorSage Weil <sage@redhat.com>
Tue, 7 Aug 2018 22:02:56 +0000 (17:02 -0500)
committerSage Weil <sage@redhat.com>
Tue, 7 Aug 2018 22:03:06 +0000 (17:03 -0500)
This avoids a c_str() on a temporary string later down the line, which
avoids a use-after-free.

Fixes: http://tracker.ceph.com/issues/26875
Signed-off-by: Sage Weil <sage@redhat.com>
src/kv/KeyValueDB.h
src/kv/RocksDBStore.cc
src/os/bluestore/BitmapFreelistManager.cc
src/os/bluestore/BlueStore.cc
src/test/objectstore/test_kv.cc

index a3fbe2fd54050f27453d9cae544208ee43899b6f..097fe12827804444adc7469315d59275f1707707 100644 (file)
@@ -447,7 +447,7 @@ public:
       const char *rdata, size_t rlen,
       std::string *new_value) = 0;
     /// We use each operator name and each prefix to construct the overall RocksDB operator name for consistency check at open time.
-    virtual string name() const = 0;
+    virtual const char *name() const = 0;
 
     virtual ~MergeOperator() {}
   };
index a19d84de735699064e5fc82a136774b48347fb6b..e2fef5d3823de56e4b31a539700586267389b13f 100644 (file)
@@ -128,7 +128,7 @@ public:
   explicit MergeOperatorLinker(const std::shared_ptr<KeyValueDB::MergeOperator> &o) : mop(o) {}
 
   const char *Name() const override {
-    return mop->name().c_str();
+    return mop->name();
   }
 
   bool Merge(const rocksdb::Slice& key,
index 5270dbc9e2010940e77e6f80b21304c0aaa80b33..27af4c75c4aaecfa93150cb21f3f5dda5e8c9985 100644 (file)
@@ -35,7 +35,7 @@ struct XorMergeOperator : public KeyValueDB::MergeOperator {
   }
   // We use each operator name and each prefix to construct the
   // overall RocksDB operator name for consistency check at open time.
-  string name() const override {
+  const char *name() const override {
     return "bitwise_xor";
   }
 };
index 42318ab811143e929b08c648c39ea803b36eaa0a..2b2386509f19ab5d8da11140646f89fc6d57cdb4 100644 (file)
@@ -560,7 +560,7 @@ struct Int64ArrayMergeOperator : public KeyValueDB::MergeOperator {
   }
   // We use each operator name and each prefix to construct the
   // overall RocksDB operator name for consistency check at open time.
-  string name() const override {
+  const char *name() const override {
     return "int64_array";
   }
 };
index 407cee5d929ca2ef7b0f8b99993566c4c071ec01..c47a29299bc438e2ccf458bdeaf0d63e41badf1c 100644 (file)
@@ -208,7 +208,7 @@ struct AppendMOP : public KeyValueDB::MergeOperator {
   }
   // We use each operator name and each prefix to construct the
   // overall RocksDB operator name for consistency check at open time.
-  string name() const override {
+  const char *name() const override {
     return "Append";
   }
 };