From e8766abafdafe6211ad4bf945b6ccd23e0a5fea1 Mon Sep 17 00:00:00 2001 From: renxichen Date: Fri, 16 Jun 2023 17:09:43 +0800 Subject: [PATCH] Fix a segfault on a non-stringable argument to macro call from Lua (cherry picked from commit ad13615fa9ad6730537058801f6fc89b4d639209) --- ...n-a-non-stringable-argument-to-macro.patch | 58 +++++++++++++++++++ rpm.spec | 6 +- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch diff --git a/backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch b/backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch new file mode 100644 index 0000000..541c6c3 --- /dev/null +++ b/backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch @@ -0,0 +1,58 @@ +From 856ddc334174fd37fe4ce81bc9f9f11a08cf6c81 Mon Sep 17 00:00:00 2001 +From: Panu Matilainen +Date: Fri, 17 Mar 2023 12:53:42 +0200 +Subject: [PATCH] Fix a segfault on a non-stringable argument to macro call + from Lua + +When natively calling a parametric macro from Lua, with the arguments +inside a table, we can't assume lua_tostring() always succeeds as it +can fail eg on a table. Report the error instead of crashing in argvAdd(), +and add a test as well. +--- + rpmio/rpmlua.c | 9 +++++++-- + tests/rpmmacro.at | 9 +++++++++ + 2 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/rpmio/rpmlua.c b/rpmio/rpmlua.c +index 6c42af792..0e3685713 100644 +--- a/rpmio/rpmlua.c ++++ b/rpmio/rpmlua.c +@@ -1178,8 +1178,13 @@ static int mc_call(lua_State *L) + + for (int i = 1; i <= nitem; i++) { + lua_rawgeti(L, 1, i); +- argvAdd(&argv, lua_tostring(L, -1)); +- lua_pop(L, 1); ++ const char *s= lua_tostring(L, -1); ++ if (s) { ++ argvAdd(&argv, s); ++ lua_pop(L, 1); ++ } else { ++ luaL_argerror(L, i, "cannot convert to string"); ++ } + } + + if (rpmExpandThisMacro(*mc, name, argv, &buf, 0) >= 0) { +diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at +index 55b7d5fa5..22d873e81 100644 +--- a/tests/rpmmacro.at ++++ b/tests/rpmmacro.at +@@ -713,6 +713,15 @@ nil + 1:%{?aaa} 2:%{yyy} + that + ]) ++ ++AT_CHECK([[ ++runroot rpm \ ++ --eval "%{lua:macros.defined({1,2,{}})}" ++]], ++[1], ++[], ++[[error: lua script failed: [string ""]:1: bad argument #3 to 'defined' (cannot convert to string) ++]]) + AT_CLEANUP + + AT_SETUP([lua macros recursion]) +-- +2.27.0 + diff --git a/rpm.spec b/rpm.spec index fd0958c..a2e432c 100644 --- a/rpm.spec +++ b/rpm.spec @@ -1,6 +1,6 @@ Name: rpm Version: 4.17.0 -Release: 25 +Release: 26 Summary: RPM Package Manager License: GPLv2+ URL: http://www.rpm.org/ @@ -106,6 +106,7 @@ Patch6068: backport-Add-a-test-for-special-device-node-installation.patch Patch6069: backport-support-for-POSIX-getopt-behaviour.patch Patch6070: backport-Use-proper-type-for-copyTagsFromMainDebug.patch Patch6071: backport-Fix-a-copy-paste-help-description-of-whatconflicts-R.patch +Patch6072: backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch BuildRequires: gcc autoconf automake libtool make gawk popt-devel openssl-devel readline-devel BuildRequires: zlib-devel zstd-devel >= 1.3.8 xz-devel bzip2-devel libarchive-devel ima-evm-utils-devel @@ -380,6 +381,9 @@ make check || (cat tests/rpmtests.log; exit 0) %{_mandir}/man1/gendiff.1* %changelog +* Fri Jun 16 2023 renhongxun - 4.17.0-26 +- Fix a segfault on a non-stringable argument to macro call from Lua + * Tue Jun 13 2023 renhongxun - 4.17.0-25 - Fix a copy-paste --help description of --whatconflicts