guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 22/58: Fix error reporting in 'load-thunk-from-memory'.


From: Andy Wingo
Subject: [Guile-commits] 22/58: Fix error reporting in 'load-thunk-from-memory'.
Date: Tue, 7 Aug 2018 06:58:33 -0400 (EDT)

wingo pushed a commit to branch lightning
in repository guile.

commit a44c2a679f2af8d44812a97ddaeb910561f1a568
Author: Mark H Weaver <address@hidden>
Date:   Mon Jun 11 01:06:34 2018 -0400

    Fix error reporting in 'load-thunk-from-memory'.
    
    Previously 'load-thunk-from-memory' would often throw to 'system-error'
    based on a stale value in 'errno', leading to incorrect error messages.
    
    * libguile/loader.c (load_thunk_from_memory): Set 'errno' to 0 before
    jumping to cleanup in the ABORT preprocessor macro, and also in the case
    when 'process_dynamic_segment' reports an error.
---
 libguile/loader.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libguile/loader.c b/libguile/loader.c
index b562693..f4ddfed 100644
--- a/libguile/loader.c
+++ b/libguile/loader.c
@@ -348,7 +348,7 @@ process_dynamic_segment (char *base, Elf_Phdr *dyn_phdr,
   return NULL;
 }
 
-#define ABORT(msg) do { err_msg = msg; goto cleanup; } while (0)
+#define ABORT(msg) do { err_msg = msg; errno = 0; goto cleanup; } while (0)
 
 static SCM
 load_thunk_from_memory (char *data, size_t len, int is_read_only)
@@ -469,7 +469,10 @@ load_thunk_from_memory (char *data, size_t len, int 
is_read_only)
 
   if ((err_msg = process_dynamic_segment (data, &ph[dynamic_segment],
                                           &init, &entry, &frame_maps)))
-    goto cleanup;
+    {
+      errno = 0;                                 /* not an OS error */
+      goto cleanup;
+    }
 
   if (scm_is_true (init))
     scm_call_0 (init);



reply via email to

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