Fix a segfault on a non-stringable argument to macro call from Lua

(cherry picked from commit ad13615fa9ad6730537058801f6fc89b4d639209)
This commit is contained in:
renxichen 2023-06-16 17:09:43 +08:00 committed by openeuler-sync-bot
parent 485f6466ba
commit e8766abafd
2 changed files with 63 additions and 1 deletions

View File

@ -0,0 +1,58 @@
From 856ddc334174fd37fe4ce81bc9f9f11a08cf6c81 Mon Sep 17 00:00:00 2001
From: Panu Matilainen <pmatilai@redhat.com>
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 "<lua>"]:1: bad argument #3 to 'defined' (cannot convert to string)
+]])
AT_CLEANUP
AT_SETUP([lua macros recursion])
--
2.27.0

View File

@ -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<renhongxun@h-partners.com> - 4.17.0-26
- Fix a segfault on a non-stringable argument to macro call from Lua
* Tue Jun 13 2023 renhongxun<renhongxun@h-partners.com> - 4.17.0-25
- Fix a copy-paste --help description of --whatconflicts