# HG changeset patch # User Bram Moolenaar # Date 1600713904 -7200 # Node ID 9f5a84baa4645b4ec9be2d923b09202203770618 # Parent 2ac192d482a346e792ef54442a398ba601e9a097 patch 8.2.1720: Vim9: memory leak with heredoc that isn't executed Commit: https://github.com/vim/vim/commit/078269bdce7e75d5693c7313d92a229786bb95ee Author: Bram Moolenaar Date: Mon Sep 21 20:35:55 2020 +0200 patch 8.2.1720: Vim9: memory leak with heredoc that isn't executed Problem: Vim9: memory leak with heredoc that isn't executed. (Dominique Pell?) Solution: Don't clear the list items. (closes #6991) diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -259,6 +259,14 @@ def Test_assignment() let w: number w = 123 assert_equal(123, w) + + + # this should not leak + if 0 + let text =<< trim END + some text + END + endif enddef def Test_vim9_single_char_vars() diff --git a/src/version.c b/src/version.c --- 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 */ /**/ + 1720, +/**/ 1719, /**/ 1718, diff --git a/src/vim9compile.c b/src/vim9compile.c --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -4622,15 +4622,18 @@ compile_assignment(char_u *arg, exarg_T eap->cookie = cctx; l = heredoc_get(eap, op + 3, FALSE); - // Push each line and the create the list. - FOR_ALL_LIST_ITEMS(l, li) + if (cctx->ctx_skip != SKIP_YES) { - generate_PUSHS(cctx, li->li_tv.vval.v_string); - li->li_tv.vval.v_string = NULL; + // Push each line and the create the list. + FOR_ALL_LIST_ITEMS(l, li) + { + generate_PUSHS(cctx, li->li_tv.vval.v_string); + li->li_tv.vval.v_string = NULL; + } + generate_NEWLIST(cctx, l->lv_len); + type = &t_list_string; + member_type = &t_list_string; } - generate_NEWLIST(cctx, l->lv_len); - type = &t_list_string; - member_type = &t_list_string; list_free(l); p += STRLEN(p); end = p;