diff src/vim9execute.c @ 24065:a6aec9a89184 v8.2.2574

patch 8.2.2574: Vim9: crash when calling partial with wrong function Commit: https://github.com/vim/vim/commit/04947cc6ed313b6b99889c27d008c68a373df634 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 6 19:26:46 2021 +0100 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 https://github.com/vim/vim/issues/7912)
author Bram Moolenaar <Bram@vim.org>
date Sat, 06 Mar 2021 19:30:02 +0100
parents e45b2e28e45e
children 5006d95ef82d
line wrap: on
line diff
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -797,7 +797,27 @@ call_by_name(char_u *name, int argcount,
     }
 
     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;
 }