diff options
Diffstat (limited to 'src/lj_lex.c')
-rw-r--r-- | src/lj_lex.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/lj_lex.c b/src/lj_lex.c index fb3d95ee..1c9923cd 100644 --- a/src/lj_lex.c +++ b/src/lj_lex.c | |||
@@ -48,6 +48,11 @@ static LJ_NOINLINE LexChar lex_more(LexState *ls) | |||
48 | size_t sz; | 48 | size_t sz; |
49 | const char *p = ls->rfunc(ls->L, ls->rdata, &sz); | 49 | const char *p = ls->rfunc(ls->L, ls->rdata, &sz); |
50 | if (p == NULL || sz == 0) return LEX_EOF; | 50 | if (p == NULL || sz == 0) return LEX_EOF; |
51 | if (sz >= LJ_MAX_BUF) { | ||
52 | if (sz != ~(size_t)0) lj_err_mem(ls->L); | ||
53 | sz = ~(uintptr_t)0 - (uintptr_t)p; | ||
54 | ls->endmark = 1; | ||
55 | } | ||
51 | ls->pe = p + sz; | 56 | ls->pe = p + sz; |
52 | ls->p = p + 1; | 57 | ls->p = p + 1; |
53 | return (LexChar)(uint8_t)p[0]; | 58 | return (LexChar)(uint8_t)p[0]; |
@@ -406,6 +411,7 @@ int lj_lex_setup(lua_State *L, LexState *ls) | |||
406 | ls->lookahead = TK_eof; /* No look-ahead token. */ | 411 | ls->lookahead = TK_eof; /* No look-ahead token. */ |
407 | ls->linenumber = 1; | 412 | ls->linenumber = 1; |
408 | ls->lastline = 1; | 413 | ls->lastline = 1; |
414 | ls->endmark = 0; | ||
409 | lex_next(ls); /* Read-ahead first char. */ | 415 | lex_next(ls); /* Read-ahead first char. */ |
410 | if (ls->c == 0xef && ls->p + 2 <= ls->pe && (uint8_t)ls->p[0] == 0xbb && | 416 | if (ls->c == 0xef && ls->p + 2 <= ls->pe && (uint8_t)ls->p[0] == 0xbb && |
411 | (uint8_t)ls->p[1] == 0xbf) { /* Skip UTF-8 BOM (if buffered). */ | 417 | (uint8_t)ls->p[1] == 0xbf) { /* Skip UTF-8 BOM (if buffered). */ |