qqiangwu / cppsafe

Cpp lifetime safety profile static analyzer
MIT License
45 stars 1 forks source link

rocksdb: pointer init inside member call #13

Open qqiangwu opened 7 months ago

qqiangwu commented 7 months ago
TEST_F(CorruptionTest, FileSystemStateCorrupted) {
  for (int iter = 0; iter < 2; ++iter) {
    Options options;
    options.level_compaction_dynamic_level_bytes = false;
    options.env = env_.get();
    options.paranoid_checks = true;
    options.create_if_missing = true;
    Reopen(&options);
    Build(10);
    ASSERT_OK(db_->Flush(FlushOptions()));
    DBImpl* dbi = static_cast_with_check<DBImpl>(db_);
    std::vector<LiveFileMetaData> metadata;
    dbi->GetLiveFilesMetaData(&metadata);
    ASSERT_GT(metadata.size(), 0);
    std::string filename = dbname_ + metadata[0].name;

    delete db_;
    db_ = nullptr;

    if (iter == 0) {  // corrupt file size
      std::unique_ptr<WritableFile> file;
      ASSERT_OK(env_->NewWritableFile(filename, &file, EnvOptions()));
      ASSERT_OK(file->Append(Slice("corrupted sst")));
      file.reset();
      Status x = TryReopen(&options);
      ASSERT_TRUE(x.IsCorruption());
    } else {  // delete the file
      ASSERT_OK(env_->DeleteFile(filename));
      Status x = TryReopen(&options);
      ASSERT_TRUE(x.IsCorruption());
    }

    ASSERT_OK(DestroyDB(dbname_, options_));
  }
}

db/corruption_test.cc

qqiangwu commented 7 months ago
/Users/wuqq/dev/rocksdb-main/db/corruption_test.cc:790:15: warning: passing a possibly null pointer as argument where a non-null pointer is expected
  790 |     ASSERT_OK(db_->Flush(FlushOptions()));
      |               ^~~
/Users/wuqq/dev/rocksdb-main/test_util/testharness.h:83:62: note: expanded from macro 'ASSERT_OK'
   83 |   ASSERT_PRED_FORMAT1(ROCKSDB_NAMESPACE::test::AssertStatus, s)
      |                                                              ^
/Users/wuqq/dev/rocksdb-main/third-party/gtest-1.8.1/fused-src/gtest/gtest.h:19909:36: note: expanded from macro 'ASSERT_PRED_FORMAT1'
 19909 |   GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
       |                                    ^~
/Users/wuqq/dev/rocksdb-main/third-party/gtest-1.8.1/fused-src/gtest/gtest.h:19892:34: note: expanded from macro 'GTEST_PRED_FORMAT1_'
 19892 |   GTEST_ASSERT_(pred_format(#v1, v1), \
       |                                  ^~
/Users/wuqq/dev/rocksdb-main/third-party/gtest-1.8.1/fused-src/gtest/gtest.h:19868:52: note: expanded from macro 'GTEST_ASSERT_'
 19868 |   if (const ::testing::AssertionResult gtest_ar = (expression)) \
       |                                                    ^~~~~~~~~~
/Users/wuqq/dev/rocksdb-main/db/corruption_test.cc:798:11: note: assigned here
  798 |     db_ = nullptr;
      |           ^~~~~~~