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
This commit is contained in:
Robert Hencke 2021-08-09 03:52:54 -04:00 committed by GitHub
parent 28a592f2d4
commit 75fc601ff5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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 {