mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Disable loading bytecode with an extra header (BOM or #!).
This commit is contained in:
parent
eec0d80d1b
commit
53a285c0c3
@ -139,6 +139,7 @@ ERRDEF(XFOR, LUA_QL("=") " or " LUA_QL("in") " expected")
|
|||||||
/* Bytecode reader errors. */
|
/* Bytecode reader errors. */
|
||||||
ERRDEF(BCFMT, "cannot load incompatible bytecode")
|
ERRDEF(BCFMT, "cannot load incompatible bytecode")
|
||||||
ERRDEF(BCBAD, "cannot load malformed bytecode")
|
ERRDEF(BCBAD, "cannot load malformed bytecode")
|
||||||
|
ERRDEF(BCHEAD, "attempt to load bytecode with extra header")
|
||||||
|
|
||||||
#if LJ_HASFFI
|
#if LJ_HASFFI
|
||||||
/* FFI errors. */
|
/* FFI errors. */
|
||||||
|
18
src/lj_lex.c
18
src/lj_lex.c
@ -411,6 +411,7 @@ static int llex(LexState *ls, TValue *tv)
|
|||||||
/* Setup lexer state. */
|
/* Setup lexer state. */
|
||||||
int lj_lex_setup(lua_State *L, LexState *ls)
|
int lj_lex_setup(lua_State *L, LexState *ls)
|
||||||
{
|
{
|
||||||
|
int header = 0;
|
||||||
ls->L = L;
|
ls->L = L;
|
||||||
ls->fs = NULL;
|
ls->fs = NULL;
|
||||||
ls->n = 0;
|
ls->n = 0;
|
||||||
@ -430,6 +431,7 @@ int lj_lex_setup(lua_State *L, LexState *ls)
|
|||||||
ls->n -= 2;
|
ls->n -= 2;
|
||||||
ls->p += 2;
|
ls->p += 2;
|
||||||
next(ls);
|
next(ls);
|
||||||
|
header = 1;
|
||||||
}
|
}
|
||||||
if (ls->current == '#') { /* Skip POSIX #! header line. */
|
if (ls->current == '#') { /* Skip POSIX #! header line. */
|
||||||
do {
|
do {
|
||||||
@ -437,8 +439,22 @@ int lj_lex_setup(lua_State *L, LexState *ls)
|
|||||||
if (ls->current == END_OF_STREAM) return 0;
|
if (ls->current == END_OF_STREAM) return 0;
|
||||||
} while (!currIsNewline(ls));
|
} while (!currIsNewline(ls));
|
||||||
inclinenumber(ls);
|
inclinenumber(ls);
|
||||||
|
header = 1;
|
||||||
}
|
}
|
||||||
return (ls->current == LUA_SIGNATURE[0]); /* Bytecode dump? */
|
if (ls->current == LUA_SIGNATURE[0]) { /* Bytecode dump. */
|
||||||
|
if (header) {
|
||||||
|
/*
|
||||||
|
** Loading bytecode with an extra header is disabled for security
|
||||||
|
** reasons. This may circumvent the usual check for bytecode vs.
|
||||||
|
** Lua code by looking at the first char. Since this is a potential
|
||||||
|
** security violation no attempt is made to echo the chunkname either.
|
||||||
|
*/
|
||||||
|
setstrV(L, L->top++, lj_err_str(L, LJ_ERR_BCHEAD));
|
||||||
|
lj_err_throw(L, LUA_ERRSYNTAX);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cleanup lexer state. */
|
/* Cleanup lexer state. */
|
||||||
|
Loading…
Reference in New Issue
Block a user