guile-commits
[Top][All Lists]
Advanced

[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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]