[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 01/02: Fix stack overflow if printing a pre-boot error t
From: |
Andy Wingo |
Subject: |
[Guile-commits] 01/02: Fix stack overflow if printing a pre-boot error throws an error |
Date: |
Mon, 25 Nov 2019 10:33:02 -0500 (EST) |
wingo pushed a commit to branch master
in repository guile.
commit 2fbc38f0d08f00632c063139b750d6976bf5499b
Author: Andy Wingo <address@hidden>
Date: Mon Nov 25 09:46:13 2019 +0100
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 9c89c65..e837abe 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);