1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-29 19:30:36 +02:00

Fix stack overflow if printing a pre-boot error throws an error

* libguile/throw.c (scm_throw): Fall back to fprintf if all is lost.
This commit is contained in:
Andy Wingo 2019-11-25 09:46:13 +01:00
parent a12e862bec
commit 2fbc38f0d0

View file

@ -243,11 +243,20 @@ scm_throw (SCM key, SCM args)
{
SCM throw = scm_variable_ref (throw_var);
if (scm_is_false (throw)) {
SCM port = scm_current_error_port ();
scm_puts ("Pre-boot error; key: ", port);
scm_write (key, port);
scm_puts (", args: ", port);
scm_write (args, port);
static int error_printing_error = 0;
if (error_printing_error++)
{
fprintf (stderr, "Error while printing pre-boot error: %s\n",
scm_i_symbol_chars (key));
}
else
{
SCM port = scm_current_error_port ();
scm_puts ("Pre-boot error; key: ", port);
scm_write (key, port);
scm_puts (", args: ", port);
scm_write (args, port);
}
abort ();
}
scm_apply_1 (throw, key, args);