mirror of
https://github.com/lua/lua.git
synced 2026-06-07 23:53:48 +00:00
Avoid macros luaL_loadbuffer and luaL_loadfile
Use luaL_loadbufferx and luaL_loadfilex instead, being explicit about whether to accept binary chunks.
This commit is contained in:
@@ -874,7 +874,7 @@ LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t size,
|
||||
|
||||
|
||||
LUALIB_API int luaL_loadstring (lua_State *L, const char *s) {
|
||||
return luaL_loadbuffer(L, s, strlen(s), s);
|
||||
return luaL_loadbufferx(L, s, strlen(s), s, "t");
|
||||
}
|
||||
|
||||
/* }====================================================== */
|
||||
|
||||
@@ -340,9 +340,11 @@ static int load_aux (lua_State *L, int status, int envidx) {
|
||||
|
||||
|
||||
static const char *getMode (lua_State *L, int idx) {
|
||||
const char *mode = luaL_optstring(L, idx, "bt");
|
||||
if (strchr(mode, 'B') != NULL) /* Lua code cannot use fixed buffers */
|
||||
const char *mode = luaL_optstring(L, idx, NULL);
|
||||
if (mode != NULL && strchr(mode, 'B') != NULL) {
|
||||
/* Lua code cannot use fixed buffers */
|
||||
luaL_argerror(L, idx, "invalid mode");
|
||||
}
|
||||
return mode;
|
||||
}
|
||||
|
||||
@@ -425,7 +427,7 @@ static int dofilecont (lua_State *L, int d1, lua_KContext d2) {
|
||||
static int luaB_dofile (lua_State *L) {
|
||||
const char *fname = luaL_optstring(L, 1, NULL);
|
||||
lua_settop(L, 1);
|
||||
if (l_unlikely(luaL_loadfile(L, fname) != LUA_OK))
|
||||
if (l_unlikely(luaL_loadfilex(L, fname, "bt") != LUA_OK))
|
||||
return lua_error(L);
|
||||
lua_callk(L, 0, LUA_MULTRET, 0, dofilecont);
|
||||
return dofilecont(L, 0, 0);
|
||||
|
||||
2
ldblib.c
2
ldblib.c
@@ -427,7 +427,7 @@ static int db_debug (lua_State *L) {
|
||||
if (fgets(buffer, sizeof(buffer), stdin) == NULL ||
|
||||
strcmp(buffer, "cont\n") == 0)
|
||||
return 0;
|
||||
if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") ||
|
||||
if (luaL_loadbufferx(L, buffer, strlen(buffer), "=(debug command)", "t") ||
|
||||
lua_pcall(L, 0, 0, 0))
|
||||
lua_writestringerror("%s\n", luaL_tolstring(L, -1, NULL));
|
||||
lua_settop(L, 0); /* remove eventual returns */
|
||||
|
||||
@@ -541,7 +541,7 @@ static int searcher_Lua (lua_State *L) {
|
||||
const char *name = luaL_checkstring(L, 1);
|
||||
filename = findfile(L, name, "path", LUA_LSUBSEP);
|
||||
if (filename == NULL) return 1; /* module not found in this path */
|
||||
return checkload(L, (luaL_loadfile(L, filename) == LUA_OK), filename);
|
||||
return checkload(L, (luaL_loadfilex(L, filename, "bt") == LUA_OK), filename);
|
||||
}
|
||||
|
||||
|
||||
|
||||
6
ltests.c
6
ltests.c
@@ -1302,7 +1302,7 @@ static int doonnewstack (lua_State *L) {
|
||||
lua_State *L1 = lua_newthread(L);
|
||||
size_t l;
|
||||
const char *s = luaL_checklstring(L, 1, &l);
|
||||
int status = luaL_loadbuffer(L1, s, l, s);
|
||||
int status = luaL_loadbufferx(L1, s, l, s, "t");
|
||||
if (status == LUA_OK)
|
||||
status = lua_pcall(L1, 0, 0, 0);
|
||||
lua_pushinteger(L, status);
|
||||
@@ -1382,7 +1382,7 @@ static int doremote (lua_State *L) {
|
||||
const char *code = luaL_checklstring(L, 2, &lcode);
|
||||
int status;
|
||||
lua_settop(L1, 0);
|
||||
status = luaL_loadbuffer(L1, code, lcode, code);
|
||||
status = luaL_loadbufferx(L1, code, lcode, code, "t");
|
||||
if (status == LUA_OK)
|
||||
status = lua_pcall(L1, 0, LUA_MULTRET, 0);
|
||||
if (status != LUA_OK) {
|
||||
@@ -1738,7 +1738,7 @@ static int runC (lua_State *L, lua_State *L1, const char *pc) {
|
||||
lua_pushinteger(L1, luaL_len(L1, getindex));
|
||||
}
|
||||
else if EQ("loadfile") {
|
||||
luaL_loadfile(L1, luaL_checkstring(L1, getnum));
|
||||
luaL_loadfilex(L1, luaL_checkstring(L1, getnum), "t");
|
||||
}
|
||||
else if EQ("loadstring") {
|
||||
size_t slen;
|
||||
|
||||
12
lua.c
12
lua.c
@@ -207,12 +207,12 @@ static int dochunk (lua_State *L, int status) {
|
||||
|
||||
|
||||
static int dofile (lua_State *L, const char *name) {
|
||||
return dochunk(L, luaL_loadfile(L, name));
|
||||
return dochunk(L, luaL_loadfilex(L, name, "bt"));
|
||||
}
|
||||
|
||||
|
||||
static int dostring (lua_State *L, const char *s, const char *name) {
|
||||
return dochunk(L, luaL_loadbuffer(L, s, strlen(s), name));
|
||||
return dochunk(L, luaL_loadbufferx(L, s, strlen(s), name, "t"));
|
||||
}
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@ static int handle_script (lua_State *L, char **argv) {
|
||||
const char *fname = argv[0];
|
||||
if (strcmp(fname, "-") == 0 && strcmp(argv[-1], "--") != 0)
|
||||
fname = NULL; /* stdin */
|
||||
status = luaL_loadfile(L, fname);
|
||||
status = luaL_loadfilex(L, fname, "bt");
|
||||
if (status == LUA_OK) {
|
||||
int n = pushargs(L); /* push arguments to script */
|
||||
status = docall(L, n, LUA_MULTRET);
|
||||
@@ -609,11 +609,11 @@ static int pushline (lua_State *L, int firstline) {
|
||||
static int addreturn (lua_State *L) {
|
||||
const char *line = lua_tostring(L, -1); /* original line */
|
||||
const char *retline = lua_pushfstring(L, "return %s;", line);
|
||||
int status = luaL_loadbuffer(L, retline, strlen(retline), "=stdin");
|
||||
int status = luaL_loadbufferx(L, retline, strlen(retline), "=stdin", "t");
|
||||
if (status == LUA_OK)
|
||||
lua_remove(L, -2); /* remove modified line */
|
||||
else
|
||||
lua_pop(L, 2); /* pop result from 'luaL_loadbuffer' and modified line */
|
||||
lua_pop(L, 2); /* pop result from 'luaL_loadbufferx' and modified line */
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -640,7 +640,7 @@ static int multiline (lua_State *L) {
|
||||
const char *line = lua_tolstring(L, 1, &len); /* get first line */
|
||||
checklocal(line);
|
||||
for (;;) { /* repeat until gets a complete statement */
|
||||
int status = luaL_loadbuffer(L, line, len, "=stdin"); /* try it */
|
||||
int status = luaL_loadbufferx(L, line, len, "=stdin", "t"); /* try it */
|
||||
if (!incomplete(L, status) || !pushline(L, 0))
|
||||
return status; /* should not or cannot try to add continuation line */
|
||||
lua_remove(L, -2); /* remove error message (from incomplete line) */
|
||||
|
||||
Reference in New Issue
Block a user