summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <pwithnall@endlessos.org>2022-10-13 13:53:11 +0100
committerPhilip Withnall <pwithnall@endlessos.org>2022-10-13 13:54:24 +0100
commitb204b46fc0c1a36b327eb5979a5ae6297dc5d049 (patch)
treed77feb3a409b172f36a16ca1c6361e9db2b009b3
parent057a9e57739fd5580ef920f6616aa55c3506d1c3 (diff)
downloadglib-b204b46fc0c1a36b327eb5979a5ae6297dc5d049.tar.gz
gprintf: Avoid an infinite loop on ENOMEM in g_vasprintf()
Instead of going through the normal error logging code, which does further allocations and will potentially call back into `g_vasprintf()` and create an infinite loop, just `fputs()` an error message and abort. If we’re getting `ENOMEM` the process is doomed anyway. Signed-off-by: Philip Withnall <pwithnall@endlessos.org> Fixes: #2753
-rw-r--r--glib/gprintf.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/glib/gprintf.c b/glib/gprintf.c
index 818a55ad2..10b436533 100644
--- a/glib/gprintf.c
+++ b/glib/gprintf.c
@@ -342,7 +342,14 @@ g_vasprintf (gchar **string,
if (len < 0)
{
if (saved_errno == ENOMEM)
- g_error ("%s: failed to allocate memory", G_STRLOC);
+ {
+ /* Try and print a message to be a bit helpful, but stick to the
+ * bare minimum to avoid any code path which could try and fail to
+ * allocate additional memory. */
+ fputs (G_STRLOC, stderr);
+ fputs (": failed to allocate memory\n", stderr);
+ g_abort ();
+ }
else
*string = NULL;
}