patch 8.2.2574: Vim9: crash when calling partial with wrong function
Problem: Vim9: crash when calling partial with wrong function.
Solution: Check argument types of called function. (closes #7912)
diff --git a/src/vim9execute.c b/src/vim9execute.c
index e20c711..2e7e204 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -797,7 +797,27 @@
}
if (ufunc != NULL)
+ {
+ if (ufunc->uf_arg_types != NULL)
+ {
+ int i;
+ typval_T *argv = STACK_TV_BOT(0) - argcount;
+
+ // The function can change at runtime, check that the argument
+ // types are correct.
+ for (i = 0; i < argcount; ++i)
+ {
+ type_T *type = i < ufunc->uf_args.ga_len
+ ? ufunc->uf_arg_types[i] : ufunc->uf_va_type;
+
+ if (type != NULL && check_typval_arg_type(type,
+ &argv[i], i + 1) == FAIL)
+ return FAIL;
+ }
+ }
+
return call_ufunc(ufunc, NULL, argcount, ectx, iptr);
+ }
return FAIL;
}