Skip to content

Commit aa18d4a

Browse files
authored
Merge pull request #41 from kimkulling/bugfix/ensure_no_string_override
TBaseString: Fix possible override
2 parents 4499610 + ae55a0c commit aa18d4a

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

include/cppcore/Common/TStringBase.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class TStringBase {
9292

9393
private:
9494
static constexpr size_t InitSize = 512;
95-
T mBuffer[InitSize] = {};
95+
T mBuffer[InitSize] = {'\0'};
9696
T *mStringBuffer{nullptr};
9797
size_t mSize{0};
9898
size_t mCapacity{InitSize};
@@ -173,11 +173,12 @@ inline void TStringBase<T>::copyFrom(TStringBase<T> &base, const T *ptr, size_t
173173
if (base.mStringBuffer != nullptr) {
174174
delete [] base.mStringBuffer;
175175
}
176-
base.mStringBuffer = new T[size];
177-
base.mCapacity = size;
176+
base.mStringBuffer = new T[size + 1];
177+
base.mCapacity = size + 1;
178178
targetPtr = base.mStringBuffer;
179179
}
180180
memcpy(targetPtr, ptr, size * sizeof(T));
181+
targetPtr[size] = '\0';
181182
base.mSize = size;
182183
}
183184

test/common/TStringBaseTest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ TEST_F(TStringBaseTest, createTest) {
4444
TEST_F(TStringBaseTest, setResetTest) {
4545
TStringBase<char> string_1;
4646
EXPECT_EQ(string_1.size(), 0);
47-
EXPECT_EQ(string_1.capacity(), 256);
47+
EXPECT_EQ(string_1.capacity(), 512);
4848
string_1.set("test", 4);
4949
EXPECT_EQ(string_1.size(), 4);
5050
EXPECT_EQ(0, strncmp(string_1.c_str(), "test", 4));
@@ -54,7 +54,7 @@ TEST_F(TStringBaseTest, setResetTest) {
5454

5555
TEST_F(TStringBaseTest, setClearTest) {
5656
TStringBase<char> string_1("test", 4);
57-
EXPECT_EQ(string_1.capacity(), 256);
57+
EXPECT_EQ(string_1.capacity(), 512);
5858
EXPECT_EQ(string_1.size(), 4);
5959
EXPECT_FALSE(string_1.isEmpty());
6060

0 commit comments

Comments
 (0)