diff options
author | Philip Withnall <pwithnall@endlessos.org> | 2022-10-13 13:53:11 +0100 |
---|---|---|
committer | Philip Withnall <pwithnall@endlessos.org> | 2022-10-13 13:54:24 +0100 |
commit | b204b46fc0c1a36b327eb5979a5ae6297dc5d049 (patch) | |
tree | d77feb3a409b172f36a16ca1c6361e9db2b009b3 | |
parent | 057a9e57739fd5580ef920f6616aa55c3506d1c3 (diff) | |
download | glib-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.c | 9 |
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; } |