changeset 23990:06da0685077b v8.2.2537

patch 8.2.2537: Vim9: crash when map() fails Commit: https://github.com/vim/vim/commit/027c4ab4d2e3ff031b98e0fb648f5acbea180293 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 21 16:20:18 2021 +0100 patch 8.2.2537: Vim9: crash when map() fails Problem: Vim9: crash when map() fails. Solution: Clear typval before using it. (closes https://github.com/vim/vim/issues/7884)
author Bram Moolenaar <Bram@vim.org>
date Sun, 21 Feb 2021 16:30:03 +0100
parents fb3dd750fada
children 88faa03cdc6f
files src/list.c src/testdir/test_vim9_builtin.vim src/version.c
diffstat 3 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/list.c
+++ b/src/list.c
@@ -2145,6 +2145,7 @@ filter_map(typval_T *argvars, typval_T *
 							   arg_errmsg, TRUE)))
 			break;
 		    set_vim_var_string(VV_KEY, di->di_key, -1);
+		    newtv.v_type = VAR_UNKNOWN;
 		    r = filter_map_one(&di->di_tv, expr, filtermap,
 								 &newtv, &rem);
 		    clear_tv(get_vim_var_tv(VV_KEY));
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -690,6 +690,27 @@ def Test_maparg_mapset()
   nunmap <F3>
 enddef
 
+def Test_map_failure()
+  CheckFeature job
+
+  var lines =<< trim END
+      vim9script
+      writefile([], 'Xtmpfile')
+      silent e Xtmpfile
+      var d = {[bufnr('%')]: {a: 0}}
+      au BufReadPost * Func()
+      def Func()
+          if d->has_key('')
+          endif
+          eval d[expand('<abuf>')]->mapnew((_, v: dict<job>) => 0)
+      enddef
+      e
+  END
+  CheckScriptFailure(lines, 'E1013:')
+  au! BufReadPost
+  delete('Xtmpfile')
+enddef
+
 def Test_max()
   g:flag = true
   var l1: list<number> = g:flag
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2537,
+/**/
     2536,
 /**/
     2535,