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.33.0