diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-12-12 18:56:32 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-12-12 18:56:32 +0000 |
commit | 6342e2c5a6570231aefabd8e34c2f2cb22f6927a (patch) | |
tree | 68f2498cf9c05c16d55cd0d6953a1df65540c7f1 /src/testdir/test_vim9_script.vim | |
parent | 67578e5bcf7404d40d42876b738b72e68add1a3e (diff) |
patch 9.0.1050: using freed memory when assigning to variable twicev9.0.1050
Problem: Using freed memory when assigning to variable twice.
Solution: Make copy of the list type. (closes #11691)
Diffstat (limited to 'src/testdir/test_vim9_script.vim')
-rw-r--r-- | src/testdir/test_vim9_script.vim | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index b6e1a89d24..c489ae55d8 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -4519,6 +4519,36 @@ def Test_echo_uninit_variables() endif enddef +def Test_free_type_before_use() + # this rather complicated script was freeing a type before using it + var lines =<< trim END + vim9script + + def Scan(rel: list<dict<any>>): func(func(dict<any>)) + return (Emit: func(dict<any>)) => { + for t in rel + Emit(t) + endfor + } + enddef + + def Build(Cont: func(func(dict<any>))): list<dict<any>> + var rel: list<dict<any>> = [] + Cont((t) => { + add(rel, t) + }) + return rel + enddef + + var R = [{A: 0}] + var result = Scan(R)->Build() + result = Scan(R)->Build() + + assert_equal(R, result) + END + v9.CheckScriptSuccess(lines) +enddef + " Keep this last, it messes up highlighting. def Test_substitute_cmd() new |