diff --git a/lua54.changes b/lua54.changes index 0d95f6c..41bfbe1 100644 --- a/lua54.changes +++ b/lua54.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Jul 29 16:31:23 UTC 2021 - Callum Farmer + +- Update upstream-bugs.patch and upstream-bugs-test.patch to fix + bugs 4,5,6 for build and tests respectively. + ------------------------------------------------------------------- Sat May 22 12:58:16 UTC 2021 - Callum Farmer diff --git a/lua54.spec b/lua54.spec index 2e49e84..cf1ce5e 100644 --- a/lua54.spec +++ b/lua54.spec @@ -1,7 +1,7 @@ # # spec file for package lua54 # -# Copyright (c) 2020 SUSE LLC +# Copyright (c) 2021 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed diff --git a/upstream-bugs-test.patch b/upstream-bugs-test.patch index 591f4ad..ce819fa 100644 --- a/upstream-bugs-test.patch +++ b/upstream-bugs-test.patch @@ -102,3 +102,73 @@ index 6aad5d253..6151f64d0 100644 do -- yielding inside closing metamethods after an error +diff --git a/testes/locals.lua b/testes/locals.lua +index 6151f64d0..62a88df57 100644 +--- a/locals.lua ++++ b/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; +diff --git a/testes/bitwise.lua b/testes/bitwise.lua +index 59781f5df..9509f7f04 100644 +--- a/bitwise.lua ++++ b/bitwise.lua +@@ -45,6 +45,11 @@ assert(-1 >> numbits == 0 and + -1 << numbits == 0 and + -1 << -numbits == 0) + ++assert(1 >> math.mininteger == 0) ++assert(1 >> math.maxinteger == 0) ++assert(1 << math.mininteger == 0) ++assert(1 << math.maxinteger == 0) ++ + assert((2^30 - 1) << 2^30 == 0) + assert((2^30 - 1) >> 2^30 == 0) + +diff --git a/testes/errors.lua b/testes/errors.lua +index 825f37c29..a7dc479a2 100644 +--- a/errors.lua ++++ b/errors.lua +@@ -228,6 +228,22 @@ do -- named objects (field '__name') + checkmessage("return {} < XX", "table with My Type") + checkmessage("return XX < io.stdin", "My Type with FILE*") + _G.XX = nil ++ ++ if T then -- extra tests for 'luaL_tolstring' ++ -- bug in 5.4.3; 'luaL_tolstring' with negative indices ++ local x = setmetatable({}, {__name="TABLE"}) ++ assert(T.testC("Ltolstring -1; return 1", x) == tostring(x)) ++ ++ local a, b = T.testC("pushint 10; Ltolstring -2; return 2", x) ++ assert(a == 10 and b == tostring(x)) ++ ++ setmetatable(x, {__tostring=function (o) ++ assert(o == x) ++ return "ABC" ++ end}) ++ a, b, c = T.testC("pushint 10; Ltolstring -2; return 3", x) ++ assert(a == x and b == 10 and c == "ABC") ++ end + end + + -- global functions +diff --git a/ltests.c b/ltests.c +index a50f78304..97834e380 100644 +--- a/ltests/ltests.c ++++ b/ltests/ltests.c +@@ -1743,6 +1743,9 @@ static struct X { int x; } x; + (void)s1; /* to avoid warnings */ + lua_longassert((s == NULL && s1 == NULL) || strcmp(s, s1) == 0); + } ++ else if EQ("Ltolstring") { ++ luaL_tolstring(L1, getindex, NULL); ++ } + else if EQ("type") { + lua_pushstring(L1, luaL_typename(L1, getnum)); + } diff --git a/upstream-bugs.patch b/upstream-bugs.patch index 1a7a7a6..8bccf4f 100644 --- a/upstream-bugs.patch +++ b/upstream-bugs.patch @@ -147,3 +147,74 @@ index 16e01d683..e4b1903e7 100644 if (L->top < ci->top) L->top = ci->top; luaF_close(L, base, CLOSEKTOP, 1); +From 6a0dace25a4b5b77f0fa6911de2ba26ef0fdff2c Mon Sep 17 00:00:00 2001 +From: Roberto Ierusalimschy +Date: Sun, 20 Jun 2021 15:36:36 -0300 +Subject: [PATCH] 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 df9473c27..3abe3d751 100644 +--- a/src/lparser.c ++++ b/src/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 */ + } +From 62fb93442753cbfb828335cd172e71471dffd536 Mon Sep 17 00:00:00 2001 +From: Roberto Ierusalimschy +Date: Thu, 22 Jul 2021 13:44:53 -0300 +Subject: [PATCH] Bug: Negation in 'luaV_shiftr' may overflow + +Negation of an unchecked lua_Integer overflows with mininteger. +--- + lvm.c | 2 +- + testes/bitwise.lua | 5 +++++ + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/lvm.c b/lvm.c +index ec83f4159..c84a665f5 100644 +--- a/src/lvm.c ++++ b/src/lvm.c +@@ -766,7 +766,7 @@ lua_Number luaV_modf (lua_State *L, lua_Number m, lua_Number n) { + /* + ** Shift left operation. (Shift right just negates 'y'.) + */ +-#define luaV_shiftr(x,y) luaV_shiftl(x,-(y)) ++#define luaV_shiftr(x,y) luaV_shiftl(x,intop(-, 0, y)) + + lua_Integer luaV_shiftl (lua_Integer x, lua_Integer y) { + if (y < 0) { /* shift right? */ +From 439e45a2f69549b674d6a6e2023e8debfa00a2b8 Mon Sep 17 00:00:00 2001 +From: Roberto Ierusalimschy +Date: Thu, 22 Jul 2021 13:48:43 -0300 +Subject: [PATCH] Bug: luaL_tolstring may get confused with negative index + +When object has a '__name' metafield, 'luaL_tolstring' used the +received index after pushing a string on the stack. +--- + lauxlib.c | 1 + + ltests.c | 3 +++ + testes/errors.lua | 16 ++++++++++++++++ + 3 files changed, 20 insertions(+) + +diff --git a/lauxlib.c b/lauxlib.c +index 94835ef93..8ed1da112 100644 +--- a/src/lauxlib.c ++++ b/src/lauxlib.c +@@ -881,6 +881,7 @@ LUALIB_API lua_Integer luaL_len (lua_State *L, int idx) { + + + LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) { ++ idx = lua_absindex(L,idx); + if (luaL_callmeta(L, idx, "__tostring")) { /* metafield? */ + if (!lua_isstring(L, -1)) + luaL_error(L, "'__tostring' must return a string");