Skip to content

Commit 7ec754b

Browse files
committed
updated for version 7.4.525
Problem: map() leaks memory when there is an error in the expression. Solution: Call clear_tv(). (Christian Brabandt)
1 parent faa1cf8 commit 7ec754b

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

src/eval.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10720,18 +10720,20 @@ filter_map(argvars, rettv, map)
1072010720
{
1072110721
if (!HASHITEM_EMPTY(hi))
1072210722
{
10723+
int r;
10724+
1072310725
--todo;
1072410726
di = HI2DI(hi);
1072510727
if (tv_check_lock(di->di_tv.v_lock,
1072610728
(char_u *)_(arg_errmsg)))
1072710729
break;
1072810730
vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
10729-
if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
10730-
|| did_emsg)
10731+
r = filter_map_one(&di->di_tv, expr, map, &rem);
10732+
clear_tv(&vimvars[VV_KEY].vv_tv);
10733+
if (r == FAIL || did_emsg)
1073110734
break;
1073210735
if (!map && rem)
1073310736
dictitem_remove(d, di);
10734-
clear_tv(&vimvars[VV_KEY].vv_tv);
1073510737
}
1073610738
}
1073710739
hash_unlock(ht);
@@ -10782,6 +10784,7 @@ filter_map_one(tv, expr, map, remp)
1078210784
if (*s != NUL) /* check for trailing chars after expr */
1078310785
{
1078410786
EMSG2(_(e_invexpr2), s);
10787+
clear_tv(&rettv);
1078510788
goto theend;
1078610789
}
1078710790
if (map)

src/version.c

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

742742
static int included_patches[] =
743743
{ /* Add new patch number below this line */
744+
/**/
745+
525,
744746
/**/
745747
524,
746748
/**/

0 commit comments

Comments
 (0)