diff options
| author | Mike Pall <mike> | 2025-10-16 13:23:51 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2025-10-16 13:23:51 +0200 |
| commit | 5c3254d68d2579bf8c5bd1e39e612582fb5a04f6 (patch) | |
| tree | ec5487aef0317705b31dcf34b7646f8a784ce992 | |
| parent | a21ba1c9b5218ef83eb8bc6d374764da84f77ffd (diff) | |
| download | luajit-5c3254d68d2579bf8c5bd1e39e612582fb5a04f6.tar.gz luajit-5c3254d68d2579bf8c5bd1e39e612582fb5a04f6.tar.bz2 luajit-5c3254d68d2579bf8c5bd1e39e612582fb5a04f6.zip | |
Gracefully handle broken custom allocator.
Reported by Alex Orlenko. #1393
| -rw-r--r-- | src/lj_state.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/lj_state.c b/src/lj_state.c index 3cad8cc1..fb6d41a5 100644 --- a/src/lj_state.c +++ b/src/lj_state.c | |||
| @@ -261,7 +261,11 @@ LUA_API lua_State *lua_newstate(lua_Alloc allocf, void *allocd) | |||
| 261 | } | 261 | } |
| 262 | #endif | 262 | #endif |
| 263 | GG = (GG_State *)allocf(allocd, NULL, 0, sizeof(GG_State)); | 263 | GG = (GG_State *)allocf(allocd, NULL, 0, sizeof(GG_State)); |
| 264 | if (GG == NULL || !checkptrGC(GG)) return NULL; | 264 | if (GG == NULL) return NULL; |
| 265 | if (!checkptrGC(GG)) { | ||
| 266 | allocf(allocd, GG, sizeof(GG_State), 0); | ||
| 267 | return NULL; | ||
| 268 | } | ||
| 265 | memset(GG, 0, sizeof(GG_State)); | 269 | memset(GG, 0, sizeof(GG_State)); |
| 266 | L = &GG->L; | 270 | L = &GG->L; |
| 267 | g = &GG->g; | 271 | g = &GG->g; |
