From a815e81e871e1d8075894cf0ba9f282ec29dbcfa31de38778d86de75c55c98bc Mon Sep 17 00:00:00 2001 From: Callum Farmer Date: Sat, 12 Jul 2025 19:41:06 +0100 Subject: [PATCH] Update to version 5.4.8 * Also add patch upstream1.patch Signed-off-by: Callum Farmer --- lua-5.4.7-tests.tar.gz | 3 --- lua-5.4.7.tar.gz | 3 --- lua-5.4.8-tests.tar.gz | 3 +++ lua-5.4.8.tar.gz | 3 +++ lua54.changes | 7 ++++++ lua54.spec | 3 ++- upstream1.patch | 53 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 68 insertions(+), 7 deletions(-) delete mode 100644 lua-5.4.7-tests.tar.gz delete mode 100644 lua-5.4.7.tar.gz create mode 100644 lua-5.4.8-tests.tar.gz create mode 100644 lua-5.4.8.tar.gz create mode 100644 upstream1.patch diff --git a/lua-5.4.7-tests.tar.gz b/lua-5.4.7-tests.tar.gz deleted file mode 100644 index 021231c..0000000 --- a/lua-5.4.7-tests.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8a4898ffe4c7613c8009327a0722db7a41ef861d526c77c5b46114e59ebf811e -size 136602 diff --git a/lua-5.4.7.tar.gz b/lua-5.4.7.tar.gz deleted file mode 100644 index b3ae162..0000000 --- a/lua-5.4.7.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9fbf5e28ef86c69858f6d3d34eccc32e911c1a28b4120ff3e84aaa70cfbf1e30 -size 374097 diff --git a/lua-5.4.8-tests.tar.gz b/lua-5.4.8-tests.tar.gz new file mode 100644 index 0000000..eedeb45 --- /dev/null +++ b/lua-5.4.8-tests.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9581d5a7c39ffbf29b8ccde2709083c380f7bbddbd968dcb15712d2f2e33f4e5 +size 137066 diff --git a/lua-5.4.8.tar.gz b/lua-5.4.8.tar.gz new file mode 100644 index 0000000..1e53b0f --- /dev/null +++ b/lua-5.4.8.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f18ddae154e793e46eeab727c59ef1c0c0c2b744e7b94219710d76f530629ae +size 374332 diff --git a/lua54.changes b/lua54.changes index 347e137..c042fb8 100644 --- a/lua54.changes +++ b/lua54.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Sat Jul 12 18:38:52 UTC 2025 - Callum Farmer + +- Update to version 5.4.8: + * Fixed 8 bugs from 5.4.7 +- Add upstream1.patch: Numbered upstream patch + ------------------------------------------------------------------- Wed Apr 23 07:55:24 UTC 2025 - Matej Cepl diff --git a/lua54.spec b/lua54.spec index bc19a70..52bedfa 100644 --- a/lua54.spec +++ b/lua54.spec @@ -26,7 +26,7 @@ %define major_version 5.4 %define libname liblua5_4-5 Name: lua54%{name_ext} -Version: 5.4.7 +Version: 5.4.8 Release: 0 Summary: Small Embeddable Language with Procedural Syntax License: MIT @@ -45,6 +45,7 @@ Patch3: main_test.patch Patch6: shared_link.patch # PATCH-FIX-UPSTREAM inspect errno only after failure Patch8: execresult.patch +Patch100: upstream1.patch Requires(post): update-alternatives Requires(postun):update-alternatives Provides: lua = %{version} diff --git a/upstream1.patch b/upstream1.patch new file mode 100644 index 0000000..8b88db1 --- /dev/null +++ b/upstream1.patch @@ -0,0 +1,53 @@ +From 1b0f943da7dfb25987456a77259edbeea0b94edc Mon Sep 17 00:00:00 2001 +From: Roberto Ierusalimschy +Date: Mon, 16 Jun 2025 16:33:02 -0300 +Subject: [PATCH] Bug: new metatable in weak table can fool the GC + +All-weak tables are not being revisited after being visited during +propagation; if it gets a new metatable after that, the new metatable +may not be marked. +--- + lgc.c | 8 ++++++-- + testes/gc.lua | 10 ++++++++++ + 2 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/lgc.c b/lgc.c +index 5817f9eec3..c01660abc5 100644 +--- a/src/lgc.c ++++ b/src/lgc.c +@@ -553,8 +553,12 @@ static lu_mem traversetable (global_State *g, Table *h) { + traverseweakvalue(g, h); + else if (!weakvalue) /* strong values? */ + traverseephemeron(g, h, 0); +- else /* all weak */ +- linkgclist(h, g->allweak); /* nothing to traverse now */ ++ else { /* all weak */ ++ if (g->gcstate == GCSpropagate) ++ linkgclist(h, g->grayagain); /* must visit again its metatable */ ++ else ++ linkgclist(h, g->allweak); /* must clear collected entries */ ++ } + } + else /* not weak */ + traversestrongtable(g, h); +diff --git a/testes/gc.lua b/testes/gc.lua +index 03093e34ff..f017f33056 100644 +--- a/testes/gc.lua ++++ b/testes/gc.lua +@@ -301,6 +301,16 @@ collectgarbage() + assert(next(a) == string.rep('$', 11)) + + ++if T then -- bug since 5.3: all-weak tables are not being revisited ++ T.gcstate("propagate") ++ local t = setmetatable({}, {__mode = "kv"}) ++ T.gcstate("atomic") -- 't' was visited ++ setmetatable(t, {__mode = "kv"}) ++ T.gcstate("pause") -- its new metatable is not being visited ++ assert(getmetatable(t).__mode == "kv") ++end ++ ++ + -- 'bug' in 5.1 + a = {} + local t = {x = 10} -- 2.49.0