Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. Pushed to trunk as r16-2209-g1ea72a15031cd8.
gcc/ChangeLog: * json.cc (string::string): When constructing from pointer and length, ensure the new buffer is null-terminated. (selftest::test_strcmp): New. (selftest::json_cc_tests): Likewise. --- gcc/json.cc | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/json.cc b/gcc/json.cc index f3f364598569..df0702f8e6c5 100644 --- a/gcc/json.cc +++ b/gcc/json.cc @@ -501,9 +501,10 @@ string::string (const char *utf8) string::string (const char *utf8, size_t len) { gcc_assert (utf8); - m_utf8 = XNEWVEC (char, len); + m_utf8 = XNEWVEC (char, len + 1); m_len = len; memcpy (m_utf8, utf8, len); + m_utf8[len] = '\0'; } /* Implementation of json::value::print for json::string. */ @@ -914,6 +915,15 @@ test_comparisons () ASSERT_JSON_NE (arr_1, arr_2); } +/* Ensure that json::string's get_string is usable as a C-style string. */ + +static void +test_strcmp () +{ + string str ("foobar", 3); + ASSERT_EQ (strcmp (str.get_string (), "foo"), 0); +} + /* Run all of the selftests within this file. */ void @@ -928,6 +938,7 @@ json_cc_tests () test_writing_literals (); test_formatting (); test_comparisons (); + test_strcmp (); } } // namespace selftest -- 2.26.3