Skip to content

Commit 027c4ab

Browse files
committed
patch 8.2.2537: Vim9: crash when map() fails
Problem: Vim9: crash when map() fails. Solution: Clear typval before using it. (closes #7884)
1 parent dc16746 commit 027c4ab

3 files changed

Lines changed: 24 additions & 0 deletions

File tree

src/list.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2145,6 +2145,7 @@ filter_map(typval_T *argvars, typval_T *rettv, filtermap_T filtermap)
21452145
arg_errmsg, TRUE)))
21462146
break;
21472147
set_vim_var_string(VV_KEY, di->di_key, -1);
2148+
newtv.v_type = VAR_UNKNOWN;
21482149
r = filter_map_one(&di->di_tv, expr, filtermap,
21492150
&newtv, &rem);
21502151
clear_tv(get_vim_var_tv(VV_KEY));

src/testdir/test_vim9_builtin.vim

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,27 @@ def Test_maparg_mapset()
690690
nunmap <F3>
691691
enddef
692692

693+
def Test_map_failure()
694+
CheckFeature job
695+
696+
var lines =<< trim END
697+
vim9script
698+
writefile([], 'Xtmpfile')
699+
silent e Xtmpfile
700+
var d = {[bufnr('%')]: {a: 0}}
701+
au BufReadPost * Func()
702+
def Func()
703+
if d->has_key('')
704+
endif
705+
eval d[expand('<abuf>')]->mapnew((_, v: dict<job>) => 0)
706+
enddef
707+
e
708+
END
709+
CheckScriptFailure(lines, 'E1013:')
710+
au! BufReadPost
711+
delete('Xtmpfile')
712+
enddef
713+
693714
def Test_max()
694715
g:flag = true
695716
var l1: list<number> = g:flag

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ static char *(features[]) =
750750

751751
static int included_patches[] =
752752
{ /* Add new patch number below this line */
753+
/**/
754+
2537,
753755
/**/
754756
2536,
755757
/**/

0 commit comments

Comments
 (0)