From 60551edfdbdf6ad6839bd3fa521a915418d63c09 Mon Sep 17 00:00:00 2001 From: Marko Lindqvist Date: Sun, 27 Nov 2022 12:50:17 +0200 Subject: [PATCH 29/29] Fix zero size callocs when registering lua signals and functions See osdn #45547 Signed-off-by: Marko Lindqvist --- common/scriptcore/luascript_func.c | 29 +++++++++++++++++++++------- common/scriptcore/luascript_signal.c | 16 +++++++++++---- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/common/scriptcore/luascript_func.c b/common/scriptcore/luascript_func.c index 5ebb4a3457..3fb0b0d257 100644 --- a/common/scriptcore/luascript_func.c +++ b/common/scriptcore/luascript_func.c @@ -132,9 +132,8 @@ void luascript_func_add_valist(struct fc_lua *fcl, const char *func_name, va_list args) { struct luascript_func *pfunc; - enum api_types *parg_types = fc_calloc(nargs, sizeof(*parg_types)); - enum api_types *pret_types = fc_calloc(nreturns, sizeof(*pret_types)); - int i; + enum api_types *parg_types; + enum api_types *pret_types; fc_assert_ret(fcl); fc_assert_ret(fcl->funcs); @@ -145,12 +144,28 @@ void luascript_func_add_valist(struct fc_lua *fcl, const char *func_name, return; } - for (i = 0; i < nargs; i++) { - *(parg_types + i) = va_arg(args, int); + if (nargs > 0) { + int i; + + parg_types = fc_calloc(nargs, sizeof(*parg_types)); + + for (i = 0; i < nargs; i++) { + *(parg_types + i) = va_arg(args, int); + } + } else { + parg_types = NULL; } - for (i = 0; i < nreturns; i++) { - *(pret_types + i) = va_arg(args, int); + if (nreturns > 0) { + int i; + + pret_types = fc_calloc(nreturns, sizeof(*pret_types)); + + for (i = 0; i < nreturns; i++) { + *(pret_types + i) = va_arg(args, int); + } + } else { + pret_types = NULL; } pfunc = func_new(required, nargs, parg_types, nreturns, pret_types); diff --git a/common/scriptcore/luascript_signal.c b/common/scriptcore/luascript_signal.c index 339337c955..8a4b76fc97 100644 --- a/common/scriptcore/luascript_signal.c +++ b/common/scriptcore/luascript_signal.c @@ -219,14 +219,22 @@ static struct signal *luascript_signal_create_valist(struct fc_lua *fcl, signal_name); return NULL; } else { - enum api_types *parg_types = fc_calloc(nargs, sizeof(*parg_types)); - int i; + enum api_types *parg_types; char *sn = fc_malloc(strlen(signal_name) + 1); struct signal *created; - for (i = 0; i < nargs; i++) { - *(parg_types + i) = va_arg(args, int); + if (nargs > 0) { + int i; + + parg_types = fc_calloc(nargs, sizeof(*parg_types)); + + for (i = 0; i < nargs; i++) { + *(parg_types + i) = va_arg(args, int); + } + } else { + parg_types = NULL; } + created = signal_new(nargs, parg_types); luascript_signal_hash_insert(fcl->signals, signal_name, created); -- 2.35.1