From 75fc601ff536d30d6617689871a130481c76117f Mon Sep 17 00:00:00 2001 From: Robert Hencke Date: Mon, 9 Aug 2021 03:52:54 -0400 Subject: [PATCH] Only re-open executable as O_RDWR if .ape present (#234) AWS Lambda uses a nonstandard kernel behavior that causes OpenExecutable() to SIGSEGV after redbean restores its APE header. This change fixes a bug so that Lambda users may work around the issue by removing the `.ape` file inside the zip structure of redbean.com. Fixes #233 --- tool/net/redbean.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tool/net/redbean.c b/tool/net/redbean.c index e008ccc0e..cffac5538 100644 --- a/tool/net/redbean.c +++ b/tool/net/redbean.c @@ -5035,7 +5035,6 @@ static int LuaGetComment(lua_State *L) { return 1; } - static int LuaGetHostOs(lua_State *L) { const char *s = NULL; if (IsLinux()) { @@ -6472,9 +6471,9 @@ static void RestoreApe(void) { if (IsOpenbsd()) return; /* TODO */ if (IsNetbsd()) return; /* TODO */ if (endswith(zpath, ".com.dbg")) return; - close(zfd); - zfd = OpenExecutable(); if ((a = GetAssetZip("/.ape", 5)) && (p = LoadAsset(a, &n))) { + close(zfd); + zfd = OpenExecutable(); write(zfd, p, n); free(p); } else {