From e64f92a480f21e1c32aab8421ae47bd76e1c30d2 Mon Sep 17 00:00:00 2001 From: Nolkaloid Date: Wed, 26 Jun 2024 16:25:32 +0200 Subject: [PATCH] Fix wrong arguments in callv with const Array --- core/variant/callable.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/variant/callable.cpp b/core/variant/callable.cpp index 667aae879cacda..1f69923c1e7f90 100644 --- a/core/variant/callable.cpp +++ b/core/variant/callable.cpp @@ -73,12 +73,18 @@ void Callable::callp(const Variant **p_arguments, int p_argcount, Variant &r_ret Variant Callable::callv(const Array &p_arguments) const { int argcount = p_arguments.size(); const Variant **argptrs = nullptr; + if (argcount) { argptrs = (const Variant **)alloca(sizeof(Variant *) * argcount); + + // Use a duplicate if the array is readonly, otherwise the addess of p_arguments->read_only will be copied + const Array &arguments_source = p_arguments.is_read_only() ? p_arguments.duplicate() : p_arguments; + for (int i = 0; i < argcount; i++) { - argptrs[i] = &p_arguments[i]; + argptrs[i] = &arguments_source[i]; } } + CallError ce; Variant ret; callp(argptrs, argcount, ret, ce);