Skip to content

Commit 4825b5e

Browse files
authored
fix: writebuffer size not include the null terminating (#72)
writebuffer not include the null terminating char
1 parent 2a48a60 commit 4825b5e

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

include/sonic/writebuffer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ class WriteBuffer {
4242
* thread-safe.
4343
*/
4444
sonic_force_inline const char* ToString() const {
45-
stack_.Push('\0');
45+
stack_.Grow(1);
46+
*(stack_.template End<char>()) = '\0';
4647
return stack_.Begin<char>();
4748
}
4849

tests/writebuffer_test.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,22 @@ TEST(WriteBuffer, ToString) {
8989
EXPECT_STREQ(cwb.ToString(), "c");
9090
}
9191
}
92+
93+
TEST(WriteBuffer, StringSize) {
94+
{
95+
WriteBuffer wb;
96+
wb.Push<char>('c');
97+
auto s = std::string(wb.ToString(), wb.Size());
98+
EXPECT_EQ(wb.Size(), 1);
99+
EXPECT_EQ(s.size(), 1);
100+
EXPECT_STREQ(s.c_str(), "c");
101+
}
102+
{
103+
WriteBuffer wb;
104+
auto s = std::string(wb.ToString(), wb.Size());
105+
EXPECT_EQ(wb.Size(), 0);
106+
EXPECT_EQ(s.size(), 0);
107+
EXPECT_STREQ(s.c_str(), "");
108+
}
109+
}
92110
} // namespace

0 commit comments

Comments
 (0)