diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-05-09 23:20:20 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-05-09 23:20:20 +0200 |
commit | 3b6a6eb7b4e0ac5b75dd2518bd27bce2b13298a3 (patch) | |
tree | 9d54c87e593b7591d54b97db482b5c74e7d44047 /src/vim9execute.c | |
parent | 09689a02840be40fa7bb10b1921fb5bc5b2908f1 (diff) | |
download | vim-git-3b6a6eb7b4e0ac5b75dd2518bd27bce2b13298a3.tar.gz |
patch 8.2.0726: Vim9: leaking memory when calling not compiled :def functionv8.2.0726
Problem: Vim9: leaking memory when calling not compiled :def function.
Solution: Check if function is compiled earlier.
Diffstat (limited to 'src/vim9execute.c')
-rw-r--r-- | src/vim9execute.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/vim9execute.c b/src/vim9execute.c index bfa24928a..4d4df0ab6 100644 --- a/src/vim9execute.c +++ b/src/vim9execute.c @@ -665,10 +665,6 @@ call_def_function( // Like STACK_TV_VAR but use the outer scope #define STACK_OUT_TV_VAR(idx) (((typval_T *)ectx.ec_outer_stack->ga_data) + ectx.ec_outer_frame + STACK_FRAME_SIZE + idx) - CLEAR_FIELD(ectx); - ga_init2(&ectx.ec_stack, sizeof(typval_T), 500); - if (ga_grow(&ectx.ec_stack, 20) == FAIL) - return FAIL; { // Check the function was compiled, it is postponed in ex_vim9script(). dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data) @@ -676,8 +672,12 @@ call_def_function( if (dfunc->df_instr == NULL) return FAIL; } - ectx.ec_dfunc_idx = ufunc->uf_dfunc_idx; + CLEAR_FIELD(ectx); + ectx.ec_dfunc_idx = ufunc->uf_dfunc_idx; + ga_init2(&ectx.ec_stack, sizeof(typval_T), 500); + if (ga_grow(&ectx.ec_stack, 20) == FAIL) + return FAIL; ga_init2(&ectx.ec_trystack, sizeof(trycmd_T), 10); // Put arguments on the stack. |