]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kv/KeyValueDB: return const char* from MergeOperator::name() 23865/head
authorSage Weil <sage@redhat.com>
Tue, 7 Aug 2018 22:02:56 +0000 (17:02 -0500)
committerNathan Cutler <ncutler@suse.com>
Sun, 2 Sep 2018 12:06:02 +0000 (14:06 +0200)
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>
(cherry picked from commit e9be5dabf256c18a5575d1394e481e4f21ece97d)

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 50714d247136920108573a93311fc664c46cc91d..b0b129dd87b038e4d49d755305f47723bebbea6c 100644 (file)
@@ -387,7 +387,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 7f72e23ed0324318b44dc40cf935b0f42949a076..3be625d1c0544db368d6ade152a57375a0fc5710 100644 (file)
@@ -127,7 +127,7 @@ public:
   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 0017df01a8cf37569d56b7d36bfbba412502d4e2..779c05608b634dca90285c24b35ce34491ed1f1a 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 1b06d4bbdc3ca359ed6a864bb63c31067d8efb35..39d6316e1e3fbc4f527449e973405a941079fe21 100644 (file)
@@ -558,7 +558,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 cf5948f8c13b2dea6a05b4056c24e321c6e03923..1869e79b3c5beda341e41c5f870591261d839f68 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";
   }
 };