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
This commit is contained in:
Philip Withnall
2022-10-13 13:53:11 +01:00
parent 057a9e5773
commit b204b46fc0

View File

@@ -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;
}