diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-02-24 12:27:31 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-02-24 12:27:31 +0100 |
commit | 1bd3cb201983859d86d644eef9e98cd3e9de7261 (patch) | |
tree | ee3f13fbf143ddcfa42ea83d7ef094c15ac98e4f | |
parent | 7d41410a455ba62128655beb91c35d3fba299287 (diff) | |
download | vim-git-1bd3cb201983859d86d644eef9e98cd3e9de7261.tar.gz |
patch 8.2.2549: crash after using "g:" in a for loopv8.2.2549
Problem: Crash after using "g:" in a for loop.
Solution: Increment the reference count. (closes #7892)
-rw-r--r-- | src/testdir/test_vim9_expr.vim | 6 | ||||
-rw-r--r-- | src/version.c | 2 | ||||
-rw-r--r-- | src/vim9execute.c | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim index 3e69a0dd4..cda1ffdb4 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -2545,6 +2545,12 @@ def Test_expr7_namespace() assert_equal('some', get(t:, 'some_var', 'xxx')) assert_equal('xxx', get(t:, 'no_var', 'xxx')) unlet t:some_var + + # check using g: in a for loop more than DO_NOT_FREE_CNT times + for i in range(100000) + if has_key(g:, 'does-not-exist') + endif + endfor enddef def Test_expr7_parens() diff --git a/src/version.c b/src/version.c index 3d52e4967..ff8264551 100644 --- 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 */ /**/ + 2549, +/**/ 2548, /**/ 2547, diff --git a/src/vim9execute.c b/src/vim9execute.c index 232f0471e..e20c71105 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -1771,6 +1771,7 @@ call_def_function( tv->v_type = VAR_DICT; tv->v_lock = 0; tv->vval.v_dict = d; + ++d->dv_refcount; ++ectx.ec_stack.ga_len; } break; |