From 2fbc38f0d08f00632c063139b750d6976bf5499b Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Mon, 25 Nov 2019 09:46:13 +0100 Subject: [PATCH] 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. --- libguile/throw.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/libguile/throw.c b/libguile/throw.c index 9c89c6511..e837abe89 100644 --- a/libguile/throw.c +++ b/libguile/throw.c @@ -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);