summaryrefslogtreecommitdiff
path: root/backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-09-10 03:05:12 +0000
committerCoprDistGit <infra@openeuler.org>2023-09-10 03:05:12 +0000
commit2bc2b430bc4c1a9a0bfd1c01da68bd53bf7da052 (patch)
treea2af4fd609c7decacbf0ea11926ea338596fb179 /backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch
parent0ae9f87336a3d78d8fbc0a1e5c75cba5f9cf8597 (diff)
automatic import of rpm
Diffstat (limited to 'backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch')
-rw-r--r--backport-Fix-a-segfault-on-a-non-stringable-argument-to-macro.patch58
1 files changed, 58 insertions, 0 deletions
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 <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
+