Ver código fonte

Gracefully handle broken custom allocator.

Reported by Alex Orlenko. #1393
Mike Pall 2 meses atrás
pai
commit
5c3254d68d
1 arquivos alterados com 5 adições e 1 exclusões
  1. 5 1
      src/lj_state.c

+ 5 - 1
src/lj_state.c

@@ -261,7 +261,11 @@ LUA_API lua_State *lua_newstate(lua_Alloc allocf, void *allocd)
   }
   }
 #endif
 #endif
   GG = (GG_State *)allocf(allocd, NULL, 0, sizeof(GG_State));
   GG = (GG_State *)allocf(allocd, NULL, 0, sizeof(GG_State));
-  if (GG == NULL || !checkptrGC(GG)) return NULL;
+  if (GG == NULL) return NULL;
+  if (!checkptrGC(GG)) {
+    allocf(allocd, GG, sizeof(GG_State), 0);
+    return NULL;
+  }
   memset(GG, 0, sizeof(GG_State));
   memset(GG, 0, sizeof(GG_State));
   L = &GG->L;
   L = &GG->L;
   g = &GG->g;
   g = &GG->g;