From 707ae4bd79c969c05f24a33ea259ad03836c8e0a Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Mon, 27 Nov 2023 11:18:03 +0000 Subject: [PATCH] gstring: Add critical warning to g_string_append_vprintf() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was previously possible for this to silently fail, which isn’t great for program correctness. Instead, raise a critical warning so the programmer knows to either validate their Unicode inputs, or fix their format placeholders. Signed-off-by: Philip Withnall Helps: #3187 --- glib/gstring.c | 4 ++++ glib/tests/string.c | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/glib/gstring.c b/glib/gstring.c index 79a8d2248..463bfeccc 100644 --- a/glib/gstring.c +++ b/glib/gstring.c @@ -1221,6 +1221,10 @@ g_string_append_vprintf (GString *string, string->len += len; g_free (buf); } + else + { + g_critical ("Failed to append to string: invalid format/args passed to g_vasprintf()"); + } } /** diff --git a/glib/tests/string.c b/glib/tests/string.c index 932a311de..bb29304c4 100644 --- a/glib/tests/string.c +++ b/glib/tests/string.c @@ -319,11 +319,17 @@ test_string_append_vprintf (void) string_append_vprintf_va (string, "some %s placeholders", "format"); + if (g_test_undefined ()) + { + g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, + "Failed to append to string*"); #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat" #pragma GCC diagnostic ignored "-Wformat-extra-args" string_append_vprintf_va (string, "%l", "invalid"); #pragma GCC diagnostic pop + g_test_assert_expected_messages (); + } g_assert_cmpstr (string->str, ==, "firsthalfsome format placeholders");