From 2618fae034c248504a00ab031208098fda743437 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 26 Aug 2025 15:54:00 +0200 Subject: [PATCH 1/2] TBaseString: Fix possible override --- include/cppcore/Common/TStringBase.h | 7 ++++--- test/common/TStringBaseTest.cpp | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/include/cppcore/Common/TStringBase.h b/include/cppcore/Common/TStringBase.h index 33b5d17..6e9f4c3 100644 --- a/include/cppcore/Common/TStringBase.h +++ b/include/cppcore/Common/TStringBase.h @@ -92,7 +92,7 @@ class TStringBase { private: static constexpr size_t InitSize = 512; - T mBuffer[InitSize] = {}; + T mBuffer[InitSize] = {'\0'}; T *mStringBuffer{nullptr}; size_t mSize{0}; size_t mCapacity{InitSize}; @@ -173,11 +173,12 @@ inline void TStringBase::copyFrom(TStringBase &base, const T *ptr, size_t if (base.mStringBuffer != nullptr) { delete [] base.mStringBuffer; } - base.mStringBuffer = new T[size]; - base.mCapacity = size; + base.mStringBuffer = new T[size + 1]; + base.mCapacity = size + 1; targetPtr = base.mStringBuffer; } memcpy(targetPtr, ptr, size * sizeof(T)); + targetPtr[size + 1] = '\0'; base.mSize = size; } diff --git a/test/common/TStringBaseTest.cpp b/test/common/TStringBaseTest.cpp index c433e0e..67f7f44 100644 --- a/test/common/TStringBaseTest.cpp +++ b/test/common/TStringBaseTest.cpp @@ -44,7 +44,7 @@ TEST_F(TStringBaseTest, createTest) { TEST_F(TStringBaseTest, setResetTest) { TStringBase string_1; EXPECT_EQ(string_1.size(), 0); - EXPECT_EQ(string_1.capacity(), 256); + EXPECT_EQ(string_1.capacity(), 512); string_1.set("test", 4); EXPECT_EQ(string_1.size(), 4); EXPECT_EQ(0, strncmp(string_1.c_str(), "test", 4)); @@ -54,7 +54,7 @@ TEST_F(TStringBaseTest, setResetTest) { TEST_F(TStringBaseTest, setClearTest) { TStringBase string_1("test", 4); - EXPECT_EQ(string_1.capacity(), 256); + EXPECT_EQ(string_1.capacity(), 512); EXPECT_EQ(string_1.size(), 4); EXPECT_FALSE(string_1.isEmpty()); From ae55a0cf4501f4b0f76523f8f1505e5f5a80d6c9 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 26 Aug 2025 15:58:25 +0200 Subject: [PATCH 2/2] Fix off-by-one index error --- include/cppcore/Common/TStringBase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cppcore/Common/TStringBase.h b/include/cppcore/Common/TStringBase.h index 6e9f4c3..d31b3c9 100644 --- a/include/cppcore/Common/TStringBase.h +++ b/include/cppcore/Common/TStringBase.h @@ -178,7 +178,7 @@ inline void TStringBase::copyFrom(TStringBase &base, const T *ptr, size_t targetPtr = base.mStringBuffer; } memcpy(targetPtr, ptr, size * sizeof(T)); - targetPtr[size + 1] = '\0'; + targetPtr[size] = '\0'; base.mSize = size; }