From 6a0dace25a4b5b77f0fa6911de2ba26ef0fdff2c Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Sun, 20 Jun 2021 15:36:36 -0300 Subject: Bug: 'local function' can assign to '' variables --- lparser.c | 1 + testes/locals.lua | 2 ++ 2 files changed, 3 insertions(+) diff --git a/lparser.c b/lparser.c index df9473c2..3abe3d75 100644 --- a/lparser.c +++ b/lparser.c @@ -1785,6 +1785,7 @@ static void funcstat (LexState *ls, int line) { luaX_next(ls); /* skip FUNCTION */ ismethod = funcname(ls, &v); body(ls, &b, ismethod, line); + check_readonly(ls, &v); luaK_storevar(ls->fs, &v, &b); luaK_fixline(ls->fs, line); /* definition "happens" in the first line */ } diff --git a/testes/locals.lua b/testes/locals.lua index 6151f64d..62a88df5 100644 --- a/testes/locals.lua +++ b/testes/locals.lua @@ -187,6 +187,8 @@ do -- constants checkro("y", "local x, y , z = 10, 20, 30; x = 11; y = 12") checkro("x", "local x , y, z = 10, 20, 30; x = 11") checkro("z", "local x , y, z = 10, 20, 30; y = 10; z = 11") + checkro("foo", "local foo = 10; function foo() end") + checkro("foo", "local foo = {}; function foo() end") checkro("z", [[ local a, z , b = 10; -- cgit v1.2.1