mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
Fix another potential file descriptor leak in luaL_loadfile*().
Reported by Peter Cawley. #1249
This commit is contained in:
parent
bcc6cbb188
commit
ab39082fdd
@ -87,6 +87,7 @@ LUALIB_API int luaL_loadfilex(lua_State *L, const char *filename,
|
|||||||
FileReaderCtx ctx;
|
FileReaderCtx ctx;
|
||||||
int status;
|
int status;
|
||||||
const char *chunkname;
|
const char *chunkname;
|
||||||
|
int err = 0;
|
||||||
if (filename) {
|
if (filename) {
|
||||||
chunkname = lua_pushfstring(L, "@%s", filename);
|
chunkname = lua_pushfstring(L, "@%s", filename);
|
||||||
ctx.fp = fopen(filename, "rb");
|
ctx.fp = fopen(filename, "rb");
|
||||||
@ -100,17 +101,16 @@ LUALIB_API int luaL_loadfilex(lua_State *L, const char *filename,
|
|||||||
chunkname = "=stdin";
|
chunkname = "=stdin";
|
||||||
}
|
}
|
||||||
status = lua_loadx(L, reader_file, &ctx, chunkname, mode);
|
status = lua_loadx(L, reader_file, &ctx, chunkname, mode);
|
||||||
if (ferror(ctx.fp)) {
|
if (ferror(ctx.fp)) err = errno;
|
||||||
L->top -= filename ? 2 : 1;
|
|
||||||
lua_pushfstring(L, "cannot read %s: %s", chunkname+1, strerror(errno));
|
|
||||||
if (filename)
|
|
||||||
fclose(ctx.fp);
|
|
||||||
return LUA_ERRFILE;
|
|
||||||
}
|
|
||||||
if (filename) {
|
if (filename) {
|
||||||
|
fclose(ctx.fp);
|
||||||
L->top--;
|
L->top--;
|
||||||
copyTV(L, L->top-1, L->top);
|
copyTV(L, L->top-1, L->top);
|
||||||
fclose(ctx.fp);
|
}
|
||||||
|
if (err) {
|
||||||
|
L->top--;
|
||||||
|
lua_pushfstring(L, "cannot read %s: %s", chunkname+1, strerror(err));
|
||||||
|
return LUA_ERRFILE;
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user