]> granicus.if.org Git - vim/commitdiff
patch 9.0.1104: invalid memory access when checking function argument types v9.0.1104
authorBram Moolenaar <Bram@vim.org>
Tue, 27 Dec 2022 17:25:05 +0000 (17:25 +0000)
committerBram Moolenaar <Bram@vim.org>
Tue, 27 Dec 2022 17:25:05 +0000 (17:25 +0000)
Problem:    Invalid memory access when checking function argument types.
Solution:   Do not check beyond the number of arguments. (closes #11755)

src/testdir/test_vim9_func.vim
src/version.c
src/vim9type.c

index a5e3e902548f56142b19e5721209918155ff3424..0edf7eab713ca2837cb4438f3784e52757bf6a67 100644 (file)
@@ -426,6 +426,16 @@ def Test_check_argument_type()
       Func()
   END
   v9.CheckScriptFailure(lines, 'E1013: Argument 2: type mismatch, expected number but got bool', 2)
+
+  lines =<< trim END
+      vim9script
+
+      def Foobar(Fn: func(any, ?string): any)
+      enddef
+
+      Foobar((t) => 0)
+  END
+  v9.CheckScriptSuccess(lines)
 enddef
 
 def Test_missing_return()
index b33f6d5a88a5f677145aa5a4eaa1606969aad752..8dbf11f89dbaa65852ebe794c4095c0d4cdc97fc 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1104,
 /**/
     1103,
 /**/
index 0709ce0437fb53c8364f9f7ba3f909220eef849c..393c69d7e7823c33575bd1498059401724004d92 100644 (file)
@@ -848,7 +848,7 @@ check_type_maybe(
            {
                int i;
 
-               for (i = 0; i < expected->tt_argcount; ++i)
+               for (i = 0; i < expected->tt_argcount && i < actual->tt_argcount; ++i)
                    // Allow for using "any" argument type, lambda's have them.
                    if (actual->tt_args[i] != &t_any && check_type(
                            expected->tt_args[i], actual->tt_args[i], FALSE,