fix memory corruption issue in sst_dump --show_compression_sizes

Summary: In "sst_dump --show_compression_sizes", a reference of CompressionOptions is kept in TableBuilderOptions, which is destroyed later, causing a memory issue.

Test Plan: Run valgrind against SSTDumpToolTest.CompressedSizes and make sure it is fixed

Reviewers: IslamAbdelRahman, yhchiang, kradhakrishnan, rven

Reviewed By: rven

Subscribers: leveldb, dhruba

Differential Revision: https://reviews.facebook.net/D43497
This commit is contained in:
sdong 2015-08-04 10:36:08 -07:00
parent be8621ffaf
commit 92f7039eec

View File

@ -167,8 +167,9 @@ int SstFileReader::ShowAllCompressionSizes(size_t block_size) {
for (CompressionType i = CompressionType::kNoCompression; for (CompressionType i = CompressionType::kNoCompression;
i != CompressionType::kLZ4HCCompression; i = CompressionType(i + 1)) { i != CompressionType::kLZ4HCCompression; i = CompressionType(i + 1)) {
CompressionOptions compress_opt;
TableBuilderOptions tb_opts(imoptions, ikc, &block_based_table_factories, i, TableBuilderOptions tb_opts(imoptions, ikc, &block_based_table_factories, i,
CompressionOptions(), false); compress_opt, false);
uint64_t file_size = CalculateCompressedTableSize(tb_opts, block_size); uint64_t file_size = CalculateCompressedTableSize(tb_opts, block_size);
fprintf(stdout, "Compression: %s", compress_type.find(i)->second); fprintf(stdout, "Compression: %s", compress_type.find(i)->second);
fprintf(stdout, " Size: %" PRIu64 "\n", file_size); fprintf(stdout, " Size: %" PRIu64 "\n", file_size);