From 77028b9c95bc12570f501c99fd9f45e78ae557cd Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 3 Mar 2018 10:02:12 -0700 Subject: [PATCH] fix potential error misreporting on a file-open failure --- racket/src/racket/src/port.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/racket/src/racket/src/port.c b/racket/src/racket/src/port.c index 39e33639e7..44f719b039 100644 --- a/racket/src/racket/src/port.c +++ b/racket/src/racket/src/port.c @@ -3681,9 +3681,19 @@ static void filename_exn(char *name, char *msg, char *filename, int maybe_module if (maybe_module_errno && scheme_last_error_is_racket(maybe_module_errno)) { char buffer[256]; + int errkind, errid; + scheme_sprintf(buffer, sizeof(buffer)-1, "%R"); buffer[sizeof(buffer)-1] = 0; + + /* Save errors, in case we don't raise missing-module */ + errkind = rktio_get_last_error_kind(scheme_rktio); + errid = rktio_get_last_error(scheme_rktio); + maybe_raise_missing_module(name, filename, pre, rel, post, buffer); + + /* Restore error, which might have been changed by a scheduler action */ + rktio_set_last_error(scheme_rktio, errkind, errid); } scheme_raise_exn(MZEXN_FAIL_FILESYSTEM,