From: David Malcolm Date: Fri, 11 Jul 2025 18:58:20 +0000 (-0400) Subject: json: fix null-termination of json::string X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1ea72a15031cd8aaea0f03449595bfeb4c45d167;p=thirdparty%2Fgcc.git json: fix null-termination of json::string 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. Signed-off-by: David Malcolm --- diff --git a/gcc/json.cc b/gcc/json.cc index f3f36459856..df0702f8e6c 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