lua

A copy of the Lua development repository
Log | Files | Refs | README

commit 65d1aa7a779b30bf5b0e7b968b3980b702b08b2c
parent 8004798b0374744208b102bb4cbcf12f904ea120
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Tue,  9 Apr 2019 18:40:12 -0300

Syntax should not allow numbers touching identifiers

Code like 'a = 1print()' should not be accepted.

Diffstat:
Mllex.c | 2++
Mtestes/literals.lua | 9+++++++++
2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/llex.c b/llex.c @@ -228,6 +228,8 @@ static int read_numeral (LexState *ls, SemInfo *seminfo) { save_and_next(ls); else break; } + if (lislalnum(ls->current)) /* is numeral touching an alpha num? */ + save_and_next(ls); /* force an error */ save(ls, '\0'); if (luaO_str2num(luaZ_buffer(ls->buff), &obj) == 0) /* format error? */ lexerror(ls, "malformed number", TK_FLT); diff --git a/testes/literals.lua b/testes/literals.lua @@ -306,4 +306,13 @@ assert(not load"a = 'non-ending string\n'") assert(not load"a = '\\345'") assert(not load"a = [=x]") +local function malformednum (n, exp) + local s, msg = load("return " .. n) + assert(not s and string.find(msg, exp)) +end + +malformednum("0xe-", "near <eof>") +malformednum("0xep-p", "malformed number") +malformednum("1print()", "malformed number") + print('OK')