Browse Source

Avoid calling 'fprintf' with NULL

Avoid undefined behavior in calls like «fprintf("%s", NULL)».
('lua_writestringerror' is implemented as 'fprintf', and 'lua_tostring'
can return NULL if object is not a string.)
pull/24/head
Roberto Ierusalimschy 4 years ago
parent
commit
364e569945
  1. 4
      lauxlib.c
  2. 2
      ldblib.c
  3. 4
      ltests.c

4
lauxlib.c

@ -995,8 +995,10 @@ static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) {
static int panic (lua_State *L) {
const char *msg = lua_tostring(L, -1);
if (msg == NULL) msg = "error object is not a string";
lua_writestringerror("PANIC: unprotected error in call to Lua API (%s)\n",
lua_tostring(L, -1));
msg);
return 0; /* return to Lua to abort */
}

2
ldblib.c

@ -417,7 +417,7 @@ static int db_debug (lua_State *L) {
return 0;
if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") ||
lua_pcall(L, 0, 0, 0))
lua_writestringerror("%s\n", lua_tostring(L, -1));
lua_writestringerror("%s\n", luaL_tolstring(L, -1, NULL));
lua_settop(L, 0); /* remove eventual returns */
}
}

4
ltests.c

@ -73,8 +73,10 @@ static void badexit (const char *fmt, const char *s1, const char *s2) {
static int tpanic (lua_State *L) {
const char *msg = lua_tostring(L, -1);
if (msg == NULL) msg = "error object is not a string";
return (badexit("PANIC: unprotected error in call to Lua API (%s)\n",
lua_tostring(L, -1), NULL),
msg, NULL),
0); /* do not return to Lua */
}

Loading…
Cancel
Save