Unverified Commit acc1c838 authored by Dennis Jenkins's avatar Dennis Jenkins Committed by GitHub

Merge pull request #609 from win32asm/master

Fix access beyond passed buffer when constructing RawBuffer
parents 0c21c854 37e3a3a0
...@@ -34,8 +34,8 @@ RawBuffer::RawBuffer(const char* data, size_t length, bool isDetached) ...@@ -34,8 +34,8 @@ RawBuffer::RawBuffer(const char* data, size_t length, bool isDetached)
, length_(length) , length_(length)
, isDetached_(isDetached) , isDetached_(isDetached)
{ {
data_.resize(length_ + 1); // input may come not from a ZTS - copy only length_ characters.
data_.assign(data, length_ + 1); data_.assign(data, length_);
} }
RawBuffer RawBuffer::detach(size_t fromIndex) RawBuffer RawBuffer::detach(size_t fromIndex)
......
...@@ -55,3 +55,23 @@ TEST(stream, test_file_buffer) ...@@ -55,3 +55,23 @@ TEST(stream, test_file_buffer)
std::remove(fileName); std::remove(fileName);
} }
TEST(stream, test_dyn_buffer)
{
DynamicStreamBuf buf(128);
{
std::ostream os(&buf);
for (unsigned i = 0; i < 128; ++i) {
os << "A";
}
}
auto rawbuf = buf.buffer();
ASSERT_EQ(rawbuf.size(), 128u);
ASSERT_EQ(rawbuf.isDetached(), false);
ASSERT_EQ(rawbuf.data().size(), 128u);
ASSERT_EQ(strlen(rawbuf.data().c_str()), 128u);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment