Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package lua54 for openSUSE:Factory checked 
in at 2025-07-15 16:42:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lua54 (Old)
 and      /work/SRC/openSUSE:Factory/.lua54.new.7373 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lua54"

Tue Jul 15 16:42:40 2025 rev:32 rq:1292454 version:5.4.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/lua54/lua54.changes      2025-04-25 
22:18:04.052405225 +0200
+++ /work/SRC/openSUSE:Factory/.lua54.new.7373/lua54.changes    2025-07-15 
16:43:15.098522979 +0200
@@ -1,0 +2,7 @@
+Sat Jul 12 18:38:52 UTC 2025 - Callum Farmer <gm...@opensuse.org>
+
+- Update to version 5.4.8:
+  * Fixed 8 bugs from 5.4.7
+- Add upstream1.patch: Numbered upstream patch
+
+-------------------------------------------------------------------

Old:
----
  lua-5.4.7-tests.tar.gz
  lua-5.4.7.tar.gz

New:
----
  lua-5.4.8-tests.tar.gz
  lua-5.4.8.tar.gz
  upstream1.patch

----------(New B)----------
  New:  * Fixed 8 bugs from 5.4.7
- Add upstream1.patch: Numbered upstream patch
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ lua54.spec ++++++
--- /var/tmp/diff_new_pack.2MryNw/_old  2025-07-15 16:43:16.090559872 +0200
+++ /var/tmp/diff_new_pack.2MryNw/_new  2025-07-15 16:43:16.094560021 +0200
@@ -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 @@
 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}

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.2MryNw/_old  2025-07-15 16:43:16.146561955 +0200
+++ /var/tmp/diff_new_pack.2MryNw/_new  2025-07-15 16:43:16.154562253 +0200
@@ -1,6 +1,6 @@
-mtime: 1745395177
-commit: b832770e086a5a1e39f71042603b98727463be28832c176b66ffaa599bc495a2
+mtime: 1752346359
+commit: a815e81e871e1d8075894cf0ba9f282ec29dbcfa31de38778d86de75c55c98bc
 url: https://src.opensuse.org/lua/lua54.git
-revision: b832770e086a5a1e39f71042603b98727463be28832c176b66ffaa599bc495a2
+revision: a815e81e871e1d8075894cf0ba9f282ec29dbcfa31de38778d86de75c55c98bc
 projectscmsync: https://src.opensuse.org/lua/_ObsPrj.git
 

++++++ build.specials.obscpio ++++++

++++++ lua-5.4.7-tests.tar.gz -> lua-5.4.8-tests.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/all.lua new/lua-5.4.8-tests/all.lua
--- old/lua-5.4.7-tests/all.lua 2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/all.lua 2025-05-21 23:09:17.000000000 +0200
@@ -287,7 +287,7 @@
 
 --[[
 *****************************************************************************
-* Copyright (C) 1994-2016 Lua.org, PUC-Rio.
+* Copyright (C) 1994-2025 Lua.org, PUC-Rio.
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/api.lua new/lua-5.4.8-tests/api.lua
--- old/lua-5.4.7-tests/api.lua 2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/api.lua 2025-05-21 23:09:17.000000000 +0200
@@ -399,6 +399,10 @@
   -- trivial error
   assert(T.checkpanic("pushstring hi; error") == "hi")
 
+ -- thread status inside panic (bug in 5.4.4)
+  assert(T.checkpanic("pushstring hi; error", "threadstatus; return 2") ==
+         "ERRRUN")
+
   -- using the stack inside panic
   assert(T.checkpanic("pushstring hi; error;",
     [[checkstack 5 XX
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/closure.lua 
new/lua-5.4.8-tests/closure.lua
--- old/lua-5.4.7-tests/closure.lua     2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/closure.lua     2025-05-21 23:09:17.000000000 +0200
@@ -3,6 +3,14 @@
 
 print "testing closures"
 
+do  -- bug in 5.4.7
+  _ENV[true] = 10
+  local function aux () return _ENV[1 < 2] end
+  assert(aux() == 10)
+  _ENV[true] = nil
+end
+
+
 local A,B = 0,{g=10}
 local function f(x)
   local a = {}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/coroutine.lua 
new/lua-5.4.8-tests/coroutine.lua
--- old/lua-5.4.7-tests/coroutine.lua   2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/coroutine.lua   2025-05-21 23:09:17.000000000 +0200
@@ -493,6 +493,25 @@
 a = nil
 
 
+do
+  -- bug in 5.4: thread can use message handler higher in the stack
+  -- than the variable being closed
+  local c = coroutine.create(function()
+    local clo <close> = setmetatable({}, {__close=function()
+      local x = 134   -- will overwrite message handler
+      error(x)
+    end})
+    -- yields coroutine but leaves a new message handler for it,
+    -- that would be used when closing the coroutine (except that it
+    -- will be overwritten)
+    xpcall(coroutine.yield, function() return "XXX" end)
+  end)
+
+  assert(coroutine.resume(c))   -- start coroutine
+  local st, msg = coroutine.close(c)
+  assert(not st and msg == 134)
+end
+
 -- access to locals of erroneous coroutines
 local x = coroutine.create (function ()
             local a = 10
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/errors.lua 
new/lua-5.4.8-tests/errors.lua
--- old/lua-5.4.7-tests/errors.lua      2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/errors.lua      2025-05-21 23:09:17.000000000 +0200
@@ -137,6 +137,10 @@
 -- bug in 5.4.6
 checkmessage("a = {_ENV = {}}; print(a._ENV.x + 1)", "field 'x'")
 
+-- a similar bug in 5.4.7, since 5.4.0
+checkmessage("print(('_ENV').x + 1)", "field 'x'")
+
+
 _G.aaa, _G.bbbb = nil
 
 -- calls
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/events.lua 
new/lua-5.4.8-tests/events.lua
--- old/lua-5.4.7-tests/events.lua      2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/events.lua      2025-05-21 23:09:17.000000000 +0200
@@ -370,6 +370,19 @@
 assert(x.val == "0abcdefg")
 
 
+do
+  -- bug since 5.4.1
+  local mt = setmetatable({__newindex={}}, {__mode='v'})
+  local t = setmetatable({}, mt)
+
+  if T then T.allocfailnext() end
+
+  -- seg. fault
+  for i=1, 10 do t[i] = 1 end
+end
+
+
+
 -- concat metamethod x numbers (bug in 5.1.1)
 c = {}
 local x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/ltests/ltests.c 
new/lua-5.4.8-tests/ltests/ltests.c
--- old/lua-5.4.7-tests/ltests/ltests.c 2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/ltests/ltests.c 2025-05-21 23:09:16.000000000 +0200
@@ -1655,6 +1655,9 @@
       int level = getnum;
       luaL_traceback(L1, L1, msg, level);
     }
+    else if EQ("threadstatus") {
+      lua_pushstring(L1, statcodes[lua_status(L1)]);
+    }
     else if EQ("return") {
       int n = getnum;
       if (L1 != L) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lua-5.4.7-tests/main.lua new/lua-5.4.8-tests/main.lua
--- old/lua-5.4.7-tests/main.lua        2024-06-14 00:15:10.000000000 +0200
+++ new/lua-5.4.8-tests/main.lua        2025-05-21 23:09:17.000000000 +0200
@@ -349,6 +349,11 @@
 RUN([[lua -e"_PROMPT='' _PROMPT2=''" -i < %s > %s]], prog, out)
 checkprogout("b\nc\nd\ne\n\n")
 
+-- input interrupted in continuation line
+prepfile("a.\n")
+RUN([[lua -i < %s > /dev/null 2> %s]], prog, out)
+checkprogout("near <eof>\n")
+
 local prompt = "alo"
 prepfile[[ --
 a = 2

++++++ lua-5.4.7-tests.tar.gz -> lua-5.4.8.tar.gz ++++++
++++ 63273 lines of diff (skipped)

++++++ upstream1.patch ++++++
>From 1b0f943da7dfb25987456a77259edbeea0b94edc Mon Sep 17 00:00:00 2001
From: Roberto Ierusalimschy <robe...@inf.puc-rio.br>
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}

Reply via email to