From 6794944c00800ebf78d2141e3fbc7db891692499 Mon Sep 17 00:00:00 2001 From: Leron Reznikov <reznikovl@gmail.com> Date: Thu, 19 Jan 2023 21:00:27 -0800 Subject: [PATCH] fix undefined behavior due to reading iterator data after modification --- db/builder.cc | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/db/builder.cc b/db/builder.cc index e6329e0..fe03490 100644 --- a/db/builder.cc +++ b/db/builder.cc @@ -30,14 +30,15 @@ Status BuildTable(const std::string& dbname, Env* env, const Options& options, TableBuilder* builder = new TableBuilder(options, file); meta->smallest.DecodeFrom(iter->key()); - Slice key; for (; iter->Valid(); iter->Next()) { - key = iter->key(); - builder->Add(key, iter->value()); + builder->Add(iter->key(), iter->value()); } - if (!key.empty()) { - meta->largest.DecodeFrom(key); + + iter->SeekToLast(); + if(iter->Valid()) { + meta->largest.DecodeFrom(iter->key()); } + // Finish and check for builder errors s = builder->Finish();