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)
, length_(length)
, isDetached_(isDetached)
{
data_.resize(length_ + 1);
data_.assign(data, length_ + 1);
// input may come not from a ZTS - copy only length_ characters.
data_.assign(data, length_);
}
RawBuffer RawBuffer::detach(size_t fromIndex)
......
......@@ -29,7 +29,7 @@ TEST(stream, test_buffer)
RawBuffer buffer4 = buffer3.detach(0);
ASSERT_EQ(buffer4.size(), 0u);
ASSERT_EQ(buffer4.isDetached(), false);
ASSERT_THROW(buffer1.detach(2 * len);, std::range_error);
}
......@@ -55,3 +55,23 @@ TEST(stream, test_file_buffer)
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