Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package lua54 for openSUSE:Factory checked 
in at 2021-04-21 20:58:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lua54 (Old)
 and      /work/SRC/openSUSE:Factory/.lua54.new.12324 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lua54"

Wed Apr 21 20:58:07 2021 rev:9 rq:886619 version:5.4.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/lua54/lua54.changes      2021-03-15 
10:53:32.125092064 +0100
+++ /work/SRC/openSUSE:Factory/.lua54.new.12324/lua54.changes   2021-04-21 
20:58:09.074083384 +0200
@@ -1,0 +2,14 @@
+Mon Apr 19 09:15:40 UTC 2021 - Callum Farmer <gm...@opensuse.org>
+
+- Add upstream-bugs.patch and upstream-bugs-test.patch to fix
+  bugs 1,2,3 for build and tests respectively.
+
+-------------------------------------------------------------------
+Mon Mar 29 17:04:47 UTC 2021 - Callum Farmer <gm...@opensuse.org>
+
+- Update to version 5.4.3:
+  * Fixes bugs found in Lua 5.4.2
+- Removed upstream-bugs.patch: new release (no bugs found yet)
+- Removed upstream-bugs-test.patch: new release (no bugs found yet)
+
+-------------------------------------------------------------------

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

New:
----
  lua-5.4.3-tests.tar.gz
  lua-5.4.3.tar.gz

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

Other differences:
------------------
++++++ lua54.spec ++++++
--- /var/tmp/diff_new_pack.vvGCJZ/_old  2021-04-21 20:58:09.894084676 +0200
+++ /var/tmp/diff_new_pack.vvGCJZ/_new  2021-04-21 20:58:09.898084682 +0200
@@ -25,7 +25,7 @@
 %define major_version 5.4
 %define libname liblua5_4-5
 Name:           lua54%{name_ext}
-Version:        5.4.2
+Version:        5.4.3
 Release:        0
 Summary:        Small Embeddable Language with Procedural Syntax
 License:        MIT
@@ -41,7 +41,7 @@
 Patch1:         attrib_test.patch
 Patch2:         files_test.patch
 Patch3:         main_test.patch
-# PATCH-FIX-UPSTREAM https://www.lua.org/bugs.html#5.4.2
+# PATCH-FIX-UPSTREAM https://www.lua.org/bugs.html#5.4.3
 Patch4:         upstream-bugs.patch
 Patch5:         upstream-bugs-test.patch
 %if "%{flavor}" == "test"

++++++ files_test.patch ++++++
--- /var/tmp/diff_new_pack.vvGCJZ/_old  2021-04-21 20:58:09.966084790 +0200
+++ /var/tmp/diff_new_pack.vvGCJZ/_new  2021-04-21 20:58:09.966084790 +0200
@@ -11,7 +11,7 @@
  end
  
  assert(io.output():seek() == 0)
-@@ -729,7 +729,7 @@ if not _port then
+@@ -744,7 +744,7 @@ if not _port then
      {"exit 129", "exit", 129},
      {"kill -s HUP $$", "signal", 1},
      {"kill -s KILL $$", "signal", 9},
@@ -20,7 +20,7 @@
      {progname .. ' -e " "', "ok"},
      {progname .. ' -e "os.exit(0, true)"', "ok"},
      {progname .. ' -e "os.exit(20, true)"', "exit", 20},
-@@ -742,6 +742,9 @@ if not _port then
+@@ -757,6 +757,9 @@ if not _port then
      if v[2] == "ok" then
        assert(x and y == 'exit' and z == 0)
      else
@@ -30,7 +30,7 @@
        assert(not x and y == v[2])   -- correct status and 'what'
        -- correct code if known (but always different from 0)
        assert((v[3] == nil and z > 0) or v[3] == z)
-@@ -776,6 +779,7 @@ assert(os.date(string.rep("%d", 1000), t
+@@ -791,6 +791,7 @@ assert(os.date(string.rep("%d", 1000), t
  assert(os.date(string.rep("%", 200)) == string.rep("%", 100))
  
  local function checkDateTable (t)
@@ -38,7 +38,7 @@
    _G.D = os.date("*t", t)
    assert(os.time(D) == t)
    load(os.date([[assert(D.year==%Y and D.month==%m and D.day==%d and
-@@ -791,7 +795,9 @@ if not _port then
+@@ -806,7 +806,9 @@ if not _port then
    checkDateTable(1)
    checkDateTable(1000)
    checkDateTable(0x7fffffff)

++++++ lua-5.4.2-tests.tar.gz -> lua-5.4.3-tests.tar.gz ++++++
++++ 1602 lines of diff (skipped)

++++++ lua-5.4.2-tests.tar.gz -> lua-5.4.3.tar.gz ++++++
++++ 61270 lines of diff (skipped)

++++++ lua-build-system.patch ++++++
--- /var/tmp/diff_new_pack.vvGCJZ/_old  2021-04-21 20:58:10.198085155 +0200
+++ /var/tmp/diff_new_pack.vvGCJZ/_new  2021-04-21 20:58:10.202085161 +0200
@@ -132,23 +132,23 @@
  $(LUA_A): $(BASE_O)
 -      $(AR) $@ $(BASE_O)
 -      $(RANLIB) $@
-+      $(LIBTOOL) --mode=link --tag=CC $(CC) $(LDFLAGS) -lm -ldl 
$(BASE_O:.o=.lo) -rpath /usr/lib -version-info 9:0:4 -o liblua$(V).la
++      $(LIBTOOL) --mode=link --tag=CC $(CC) $(LDFLAGS) -lm -ldl 
$(BASE_O:.o=.lo) -rpath /usr/lib -version-info 9:0:4 -o $(LUA_A)
 
  $(LUA_T): $(LUA_O) $(LUA_A)
 -      $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
-+      $(LIBTOOL) --mode=link --tag=CC $(CC) $(LDFLAGS) $(LIBS) -static 
liblua$(V).la -Wl,-E lua.lo -o $@
++      $(LIBTOOL) --mode=link --tag=CC $(CC) $(LDFLAGS) $(LIBS) -static 
$(LUA_A) -Wl,-E lua.lo -o $@
 
  $(LUAC_T): $(LUAC_O) $(LUA_A)
 -      $(CC) -o $@ $(LDFLAGS) $(LUAC_O) $(LUA_A) $(LIBS)
-+      $(LIBTOOL) --mode=link --tag=CC $(CC) $(LDFLAGS) -static liblua$(V).la 
luac.lo -o $@
++      $(LIBTOOL) --mode=link --tag=CC $(CC) $(LDFLAGS) -static $(LUA_A) 
luac.lo -o $@
 
  test:
--      ./lua -v
-+      $(LIBTOOL) --mode=execute -dlopen ./liblua$(V).la ./lua$(V) -v
+-      ./$(LUA_T) -v
++      $(LIBTOOL) --mode=execute -dlopen ./$(LUA_A) ./$(LUA_T) -v
 
  clean:
        $(RM) $(ALL_T) $(ALL_O)
-@@ -142,14 +157,6 @@
+@@ -144,14 +159,6 @@
  .PHONY: all $(PLATS) help test clean default o a depend echo
 
  # Compiler modules may use special flags.
@@ -166,7 +166,7 @@
 
 --- a/src/luaconf.h
 +++ b/src/luaconf.h
-@@ -227,7 +227,7 @@
+@@ -217,7 +217,7 @@
 
  #else                 /* }{ */
 

++++++ upstream-bugs-test.patch ++++++
--- /var/tmp/diff_new_pack.vvGCJZ/_old  2021-04-21 20:58:10.222085193 +0200
+++ /var/tmp/diff_new_pack.vvGCJZ/_new  2021-04-21 20:58:10.222085193 +0200
@@ -1,38 +1,104 @@
---- a/db.lua
-+++ b/db.lua
-@@ -31,6 +31,7 @@ end
+diff --git a/testes/locals.lua b/testes/locals.lua
+index 2c67edbdb..6aad5d253 100644
+--- a/locals.lua
++++ b/locals.lua
+@@ -335,6 +335,29 @@ do
+ end
  
+ 
++do
++  -- bug in 5.4.3: previous condition (calls cannot be tail in the
++  -- scope of to-be-closed variables) must be valid for tbc variables
++  -- created by 'for' loops.
++
++  local closed = false
++
++  local function foo ()
++    return function () return true end, 0, 0,
++           func2close(function () closed = true end)
++  end
++
++  local function tail() return closed end
++
++  local function foo1 ()
++    for k in foo() do return tail() end
++  end
++
++  assert(foo1() == false)
++  assert(closed == true)
++end
++
++
+ do print("testing errors in __close")
+ 
+   -- original error is in __close
+diff --git a/testes/locals.lua b/testes/locals.lua
+index 6aad5d253..6151f64d0 100644
+--- a/locals.lua
++++ b/locals.lua
+@@ -813,6 +813,65 @@ do
+ end
+ 
+ 
++do
++  -- yielding inside closing metamethods while returning
++  -- (bug in 5.4.3)
++
++  local extrares    -- result from extra yield (if any)
++
++  local function check (body, extra, ...)
++    local t = table.pack(...)   -- expected returns
++    local co = coroutine.wrap(body)
++    if extra then
++      extrares = co()    -- runs until first (extra) yield
++    end
++    local res = table.pack(co())   -- runs until yield inside '__close'
++    assert(res.n == 2 and res[2] == nil)
++    local res2 = table.pack(co())   -- runs until end of function
++    assert(res2.n == t.n)
++    for i = 1, #t do
++      if t[i] == "x" then
++        assert(res2[i] == res[1])    -- value that was closed
++      else
++        assert(res2[i] == t[i])
++      end
++    end
++  end
++
++  local function foo ()
++    local x <close> = func2close(coroutine.yield)
++    local extra <close> = func2close(function (self)
++      assert(self == extrares)
++      coroutine.yield(100)
++    end)
++    extrares = extra
++    return table.unpack{10, x, 30}
++  end
++  check(foo, true, 10, "x", 30)
++  assert(extrares == 100)
++
++  local function foo ()
++    local x <close> = func2close(coroutine.yield)
++    return
++  end
++  check(foo, false)
++
++  local function foo ()
++    local x <close> = func2close(coroutine.yield)
++    local y, z = 20, 30
++    return x
++  end
++  check(foo, false, "x")
++
++  local function foo ()
++    local x <close> = func2close(coroutine.yield)
++    local extra <close> = func2close(coroutine.yield)
++    return table.unpack({}, 1, 100)   -- 100 nils
++  end
++  check(foo, true, table.unpack({}, 1, 100))
++
++end
++
  do
-   assert(not pcall(debug.getinfo, print, "X"))   -- invalid option
-+  assert(not pcall(debug.getinfo, 0, ">"))   -- invalid option
-   assert(not debug.getinfo(1000))   -- out of range level
-   assert(not debug.getinfo(-1))     -- out of range level
-   local a = debug.getinfo(print)
---- a/strings.lua
-+++ b/strings.lua
-@@ -361,6 +361,9 @@ assert(load("return 1\n--comment without ending EOL")() == 
1)
- 
- 
- checkerror("table expected", table.concat, 3)
-+checkerror("at index " .. maxi, table.concat, {}, " ", maxi, maxi)
-+-- '%' escapes following minus signal
-+checkerror("at index %" .. mini, table.concat, {}, " ", mini, mini)
- assert(table.concat{} == "")
- assert(table.concat({}, 'x') == "")
- assert(table.concat({'\0', '\0\1', '\0\1\2'}, '.\0.') == 
"\0.\0.\0\1.\0.\0\1\2")
---- a/errors.lua
-+++ b/errors.lua
-@@ -191,6 +191,13 @@ checkmessage("a = 24 // 0", "divide by zero")
- checkmessage("a = 1 % 0", "'n%0'")
- 
- 
-+-- type error for an object which is neither in an upvalue nor a register.
-+-- The following code will try to index the value 10 that is stored in
-+-- the metatable, without moving it to a register.
-+checkmessage("local a = setmetatable({}, {__index = 10}).x",
-+             "attempt to index a number value")
-+
-+
- -- numeric for loops
- checkmessage("for i = {}, 10 do end", "table")
- checkmessage("for i = io.stdin, 10 do end", "FILE")
+   -- yielding inside closing metamethods after an error
+ 

++++++ upstream-bugs.patch ++++++
--- /var/tmp/diff_new_pack.vvGCJZ/_old  2021-04-21 20:58:10.238085218 +0200
+++ /var/tmp/diff_new_pack.vvGCJZ/_new  2021-04-21 20:58:10.242085225 +0200
@@ -1,46 +1,149 @@
---- a/src/ldblib.c
-+++ b/src/ldblib.c
-@@ -152,6 +152,7 @@ static int db_getinfo (lua_State *L) {
-   lua_State *L1 = getthread(L, &arg);
-   const char *options = luaL_optstring(L, arg+2, "flnSrtu");
-   checkstack(L, L1, 3);
-+  luaL_argcheck(L, options[0] != '>', arg + 2, "invalid option '>'");
-   if (lua_isfunction(L, arg + 1)) {  /* info about a function? */
-     options = lua_pushfstring(L, ">%s", options);  /* add '>' to 'options' */
-     lua_pushvalue(L, arg + 1);  /* move function to 'L1' stack */
---- a/src/ltablib.c
-+++ b/src/ltablib.c
-@@ -146,7 +146,7 @@ static int tmove (lua_State *L) {
- static void addfield (lua_State *L, luaL_Buffer *b, lua_Integer i) {
-   lua_geti(L, 1, i);
-   if (!lua_isstring(L, -1))
--    luaL_error(L, "invalid value (%s) at index %d in table for 'concat'",
-+    luaL_error(L, "invalid value (%s) at index %I in table for 'concat'",
-                   luaL_typename(L, -1), i);
-   luaL_addvalue(b);
+From 47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4 Mon Sep 17 00:00:00 2001
+From: Roberto Ierusalimschy <robe...@inf.puc-rio.br>
+Date: Wed, 7 Apr 2021 14:59:26 -0300
+Subject: [PATCH] Bug: tbc variables in "for" loops don't avoid tail calls
+
+---
+ lparser.c         | 21 +++++++++++++++------
+ testes/locals.lua | 23 +++++++++++++++++++++++
+ 2 files changed, 38 insertions(+), 6 deletions(-)
+
+diff --git a/lparser.c b/lparser.c
+index 284ef1f0c..df9473c27 100644
+--- a/src/lparser.c
++++ b/src/lparser.c
+@@ -416,6 +416,17 @@ static void markupval (FuncState *fs, int level) {
  }
---- a/src/ldebug.c
-+++ b/src/ldebug.c
-@@ -638,14 +638,18 @@ static const char *funcnamefromcode (lua_State *L, 
CallInfo *ci,
  
  
++/*
++** Mark that current block has a to-be-closed variable.
++*/
++static void marktobeclosed (FuncState *fs) {
++  BlockCnt *bl = fs->bl;
++  bl->upval = 1;
++  bl->insidetbc = 1;
++  fs->needclose = 1;
++}
++
++
  /*
--** The subtraction of two potentially unrelated pointers is
--** not ISO C, but it should not crash a program; the subsequent
--** checks are ISO C and ensure a correct result.
-+** Check whether pointer 'o' points to some value in the stack
-+** frame of the current function. Because 'o' may not point to a
-+** value in this stack, we cannot compare it with the region
-+** boundaries (undefined behaviour in ISO C).
- */
- static int isinstack (CallInfo *ci, const TValue *o) {
--  StkId base = ci->func + 1;
--  ptrdiff_t i = cast(StkId, o) - base;
--  return (0 <= i && i < (ci->top - base) && s2v(base + i) == o);
-+  StkId pos;
-+  for (pos = ci->func + 1; pos < ci->top; pos++) {
-+    if (o == s2v(pos))
-+      return 1;
-+  }
-+  return 0;  /* not found */
+ ** Find a variable with the given name 'n'. If it is an upvalue, add
+ ** this upvalue into all intermediate functions. If it is a global, set
+@@ -1599,7 +1610,7 @@ static void forlist (LexState *ls, TString *indexname) {
+   line = ls->linenumber;
+   adjust_assign(ls, 4, explist(ls, &e), &e);
+   adjustlocalvars(ls, 4);  /* control variables */
+-  markupval(fs, fs->nactvar);  /* last control var. must be closed */
++  marktobeclosed(fs);  /* last control var. must be closed */
+   luaK_checkstack(fs, 3);  /* extra space to call generator */
+   forbody(ls, base, line, nvars - 4, 1);
+ }
+@@ -1703,11 +1714,9 @@ static int getlocalattribute (LexState *ls) {
+ }
+ 
+ 
+-static void checktoclose (LexState *ls, int level) {
++static void checktoclose (FuncState *fs, int level) {
+   if (level != -1) {  /* is there a to-be-closed variable? */
+-    FuncState *fs = ls->fs;
+-    markupval(fs, level + 1);
+-    fs->bl->insidetbc = 1;  /* in the scope of a to-be-closed variable */
++    marktobeclosed(fs);
+     luaK_codeABC(fs, OP_TBC, reglevel(fs, level), 0, 0);
+   }
  }
+@@ -1751,7 +1760,7 @@ static void localstat (LexState *ls) {
+     adjust_assign(ls, nvars, nexps, &e);
+     adjustlocalvars(ls, nvars);
+   }
+-  checktoclose(ls, toclose);
++  checktoclose(fs, toclose);
+ }
+ 
+ 
+From d205f3a4847bc8b835fda91f51ba1cf45b796baf Mon Sep 17 00:00:00 2001
+From: Roberto Ierusalimschy <robe...@inf.puc-rio.br>
+Date: Sat, 10 Apr 2021 10:19:21 -0300
+Subject: [PATCH] Bug: Lua source should not use C99 comments ("//")
+
+---
+ lvm.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/lvm.c b/lvm.c
+index c9729bcca..16e01d683 100644
+--- a/src/lvm.c
++++ b/src/lvm.c
+@@ -1156,8 +1156,10 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
+     Instruction i;  /* instruction being executed */
+     StkId ra;  /* instruction's A register */
+     vmfetch();
+-// low-level line tracing for debugging Lua
+-// printf("line: %d\n", luaG_getfuncline(cl->p, pcRel(pc, cl->p)));
++    #if 0
++      /* low-level line tracing for debugging Lua */
++      printf("line: %d\n", luaG_getfuncline(cl->p, pcRel(pc, cl->p)));
++    #endif
+     lua_assert(base == ci->func + 1);
+     lua_assert(base <= L->top && L->top < L->stack_last);
+     /* invalidate top for instructions not expecting it */
+From 681297187ec45268e872b26753c441586c12bdd8 Mon Sep 17 00:00:00 2001
+From: Roberto Ierusalimschy <robe...@inf.puc-rio.br>
+Date: Fri, 16 Apr 2021 15:41:44 -0300
+Subject: [PATCH] Bug: yielding in '__close' mess up number of returns
+
+Yielding in a __close metamethod called when returning vararg results
+changes the top and so messes up the number of returned values.
+---
+ lstate.h          |  2 +-
+ lvm.c             | 12 +++++++++-
+ testes/locals.lua | 59 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 71 insertions(+), 2 deletions(-)
+
+diff --git a/lstate.h b/lstate.h
+index c1283bb6b..44cf939cb 100644
+--- a/src/lstate.h
++++ b/src/lstate.h
+@@ -165,7 +165,7 @@ typedef struct stringtable {
+ ** - field 'nyield' is used only while a function is "doing" an
+ ** yield (from the yield until the next resume);
+ ** - field 'nres' is used only while closing tbc variables when
+-** returning from a C function;
++** returning from a function;
+ ** - field 'transferinfo' is used only during call/returnhooks,
+ ** before the function starts or after it ends.
+ */
+diff --git a/lvm.c b/lvm.c
+index 16e01d683..e4b1903e7 100644
+--- a/src/lvm.c
++++ b/src/lvm.c
+@@ -847,10 +847,19 @@ void luaV_finishOp (lua_State *L) {
+       luaV_concat(L, total);  /* concat them (may yield again) */
+       break;
+     }
+-    case OP_CLOSE:  case OP_RETURN: {  /* yielded closing variables */
++    case OP_CLOSE: {  /* yielded closing variables */
+       ci->u.l.savedpc--;  /* repeat instruction to close other vars. */
+       break;
+     }
++    case OP_RETURN: {  /* yielded closing variables */
++      StkId ra = base + GETARG_A(inst);
++      /* adjust top to signal correct number of returns, in case the
++         return is "up to top" ('isIT') */
++      L->top = ra + ci->u2.nres;
++      /* repeat instruction to close other vars. and complete the return */
++      ci->u.l.savedpc--;
++      break;
++    }
+     default: {
+       /* only these other opcodes can yield */
+       lua_assert(op == OP_TFORCALL || op == OP_CALL ||
+@@ -1672,6 +1681,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
+           n = cast_int(L->top - ra);  /* get what is available */
+         savepc(ci);
+         if (TESTARG_k(i)) {  /* may there be open upvalues? */
++          ci->u2.nres = n;  /* save number of returns */
+           if (L->top < ci->top)
+             L->top = ci->top;
+           luaF_close(L, base, CLOSEKTOP, 1);

Reply via email to