From 8bb0f5472c740458708fd3edabbb8d5193a96241 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 6 Dec 2020 16:03:55 +0100 Subject: [PATCH] patch 8.2.2101: Vim9: memory leak when literal dict has an error Problem: Vim9: memory leak when literal dict has an error and when an expression is not complete. Solution: Clear the typval and the growarray. --- src/dict.c | 1 + src/version.c | 2 ++ src/vim9compile.c | 3 +++ 3 files changed, 6 insertions(+) diff --git a/src/dict.c b/src/dict.c index 311b0038d1..5581a5571b 100644 --- a/src/dict.c +++ b/src/dict.c @@ -929,6 +929,7 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal) if (**arg != ']') { emsg(_(e_missing_matching_bracket_after_dict_key)); + clear_tv(&tvkey); return FAIL; } ++*arg; diff --git a/src/version.c b/src/version.c index 2754d2f722..56cea2657d 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2101, /**/ 2100, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index f02ea60ccc..bfa54fea76 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -4392,7 +4392,10 @@ compile_and_or( // eval the next expression *arg = skipwhite(p + 2); if (may_get_next_line_error(p + 2, arg, cctx) == FAIL) + { + ga_clear(&end_ga); return FAIL; + } if ((opchar == '|' ? compile_expr3(arg, cctx, ppconst) : compile_expr4(arg, cctx, ppconst)) == FAIL) -- 2.47.2