Fix out-of-bounds read in Stream::PutCStringAsRawHex8

Summary:
When I added the Stream unit test (r338488), the build bots failed due to an out-of-
bound reads when passing an empty string to the PutCStringAsRawHex8 method.
In r338491 I removed the test case to fix the bots.

This patch fixes this in PutCStringAsRawHex8 by always checking for the terminating
null character in the given string (instead of skipping it the first time). It also re-adds the
test case I removed.

Reviewers: vsk

Reviewed By: vsk

Subscribers: vsk, lldb-commits

Differential Revision: https://reviews.llvm.org/D50149

llvm-svn: 338637
This commit is contained in:
Raphael Isemann 2018-08-01 21:07:18 +00:00
parent 9c66506604
commit f4590de992
2 changed files with 5 additions and 2 deletions

View File

@ -518,10 +518,10 @@ size_t Stream::PutCStringAsRawHex8(const char *s) {
size_t bytes_written = 0;
bool binary_is_set = m_flags.Test(eBinary);
m_flags.Clear(eBinary);
do {
while(*s) {
bytes_written += _PutHex8(*s, false);
++s;
} while (*s);
}
if (binary_is_set)
m_flags.Set(eBinary);
return bytes_written;

View File

@ -106,6 +106,9 @@ TEST_F(StreamTest, PutCharNull) {
}
TEST_F(StreamTest, PutCStringAsRawHex8) {
s.PutCStringAsRawHex8("");
EXPECT_EQ("", TakeValue());
s.PutCStringAsRawHex8("foobar");
EXPECT_EQ("666f6f626172", TakeValue());