aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/userfunc.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2025-02-03 10:45:50 +0800
committerzeertzjq <zeertzjq@outlook.com>2025-02-03 11:14:17 +0800
commit82b029cbb00dbe9649824f7795c177974955d683 (patch)
tree9f51d810edc3ce79ada931feb37df6be40fabea8 /src/nvim/eval/userfunc.c
parent638c6b406bc41d4fed5ef282bae526888de8229a (diff)
downloadrneovim-82b029cbb00dbe9649824f7795c177974955d683.tar.gz
rneovim-82b029cbb00dbe9649824f7795c177974955d683.tar.bz2
rneovim-82b029cbb00dbe9649824f7795c177974955d683.zip
vim-patch:9.0.1142: crash and/or memory leak when redefining function
Problem: Crash and/or memory leak when redefining function after error. Solution: Clear pointer after making a copy. Clear arrays on failure. (closes vim/vim#11774) https://github.com/vim/vim/commit/f057171d8b562c72334fd7c15c89ff787358ce3a Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat (limited to 'src/nvim/eval/userfunc.c')
-rw-r--r--src/nvim/eval/userfunc.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/nvim/eval/userfunc.c b/src/nvim/eval/userfunc.c
index 3538493159..6eaccbae62 100644
--- a/src/nvim/eval/userfunc.c
+++ b/src/nvim/eval/userfunc.c
@@ -2918,13 +2918,14 @@ void ex_function(exarg_T *eap)
goto ret_free;
erret:
- ga_clear_strings(&newargs);
- ga_clear_strings(&default_args);
if (fp != NULL) {
+ // these were set to "newargs" and "default_args", which are cleared below
ga_init(&fp->uf_args, (int)sizeof(char *), 1);
ga_init(&fp->uf_def_args, (int)sizeof(char *), 1);
}
errret_2:
+ ga_clear_strings(&newargs);
+ ga_clear_strings(&default_args);
ga_clear_strings(&newlines);
if (free_fp) {
xfree(fp);