From 55531fd089cff39fcfedd54046f1d1a125857ee7 Mon Sep 17 00:00:00 2001 From: Yueh-Hsuan Chiang Date: Wed, 25 Jun 2014 14:11:12 -0600 Subject: [PATCH] Fixed heap-buffer-overflow issue when Options.num_levels > 7. Summary: Currently, when num_levels has been changed to > 7, internally it will not resize max_bytes_for_level_multiplier_additional. As a result, max_bytes_for_level_multiplier_additional.size() will be smaller than num_levels, which causes heap-buffer-overflow. Test Plan: make all check Reviewers: haobo, sdong, ljin Reviewed By: ljin Subscribers: leveldb Differential Revision: https://reviews.facebook.net/D19275 --- util/options.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/util/options.cc b/util/options.cc index ee20e78b9..7f1520a74 100644 --- a/util/options.cc +++ b/util/options.cc @@ -154,6 +154,9 @@ ColumnFamilyOptions::ColumnFamilyOptions(const Options& options) max_successive_merges(options.max_successive_merges), min_partial_merge_operands(options.min_partial_merge_operands) { assert(memtable_factory.get() != nullptr); + if (max_bytes_for_level_multiplier_additional.size() < num_levels) { + max_bytes_for_level_multiplier_additional.resize(num_levels, 1); + } } DBOptions::DBOptions()