From 9df1b3a80f39cf7e7ccd6264a207518426a524f6 Mon Sep 17 00:00:00 2001 From: Mark Benvenuto Date: Wed, 23 Oct 2019 22:44:55 +0000 Subject: SERVER-44132 DataBuilder move assignment computes size incorrectly (cherry picked from commit 4cf93b3802fa90ba02cdeed36b4f6d615b6d6393) (cherry picked from commit 1beb3391a2006a6daea590abd7585d080a4209f7) --- src/mongo/base/data_builder.h | 5 ++++- src/mongo/base/data_builder_test.cpp | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/mongo/base/data_builder.h b/src/mongo/base/data_builder.h index 5e39e639489..3299015c9cd 100644 --- a/src/mongo/base/data_builder.h +++ b/src/mongo/base/data_builder.h @@ -79,9 +79,12 @@ public: } DataBuilder& operator=(DataBuilder&& other) { + size_t size = other.size(); _buf = std::move(other._buf); _capacity = other._capacity; - _unwrittenSpaceCursor = {_buf.get(), _buf.get() + other.size()}; + char* start = _buf.get() + size; + char* end = _buf.get() + _capacity; + _unwrittenSpaceCursor = {start, end}; other._capacity = 0; other._unwrittenSpaceCursor = {nullptr, nullptr}; diff --git a/src/mongo/base/data_builder_test.cpp b/src/mongo/base/data_builder_test.cpp index d497e78622e..b017384bbc3 100644 --- a/src/mongo/base/data_builder_test.cpp +++ b/src/mongo/base/data_builder_test.cpp @@ -153,7 +153,7 @@ TEST(DataBuilder, Clear) { } TEST(DataBuilder, Move) { - DataBuilder db(1); + DataBuilder db(42); ASSERT_EQUALS(true, db.writeAndAdvance(1).isOK()); @@ -162,7 +162,7 @@ TEST(DataBuilder, Move) { ConstDataRangeCursor cdrc = db2.getCursor(); ASSERT_EQUALS(static_cast(1), cdrc.readAndAdvance().getValue()); - ASSERT_EQUALS(2u, db2.capacity()); + ASSERT_EQUALS(42u, db2.capacity()); ASSERT_EQUALS(2u, db2.size()); ASSERT_EQUALS(0u, db.capacity()); -- cgit v1.2.1