Mercurial > vim
changeset 19685:d64f403289db v8.2.0399
patch 8.2.0399: various memory leaks
Commit: https://github.com/vim/vim/commit/292b90d4fa11022661f449dd3efb73d5ac737313
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Mar 18 15:23:16 2020 +0100
patch 8.2.0399: various memory leaks
Problem: Various memory leaks.
Solution: Avoid the leaks. (Ozaki Kiichi, closes https://github.com/vim/vim/issues/5803)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 18 Mar 2020 15:30:04 +0100 |
parents | 0b7b0650000a |
children | a042d32afa7d |
files | src/ex_docmd.c src/ex_getln.c src/menu.c src/message.c src/scriptfile.c src/userfunc.c src/version.c |
diffstat | 7 files changed, 29 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -1346,6 +1346,18 @@ do_cmdline( restore_dbg_stuff(&debug_saved); msg_list = saved_msg_list; + + // Cleanup if "cs_emsg_silent_list" remains. + if (cstack.cs_emsg_silent_list != NULL) + { + eslist_T *elem, *temp; + + for (elem = cstack.cs_emsg_silent_list; elem != NULL; elem = temp) + { + temp = elem->next; + vim_free(elem); + } + } #endif // FEAT_EVAL /*
--- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -4188,6 +4188,7 @@ open_cmdwin(void) if (win_split((int)p_cwh, WSP_BOT) == FAIL) { beep_flush(); + ga_clear(&winsizes); return K_IGNORE; } cmdwin_type = get_cmdline_type();
--- a/src/menu.c +++ b/src/menu.c @@ -2882,10 +2882,16 @@ menuitem_getinfo(vimmenu_T *menu, int mo if (bit < MENU_MODES) // just in case, avoid Coverity warning { if (menu->strings[bit] != NULL) + { + char_u *tofree = NULL; + status = dict_add_string(dict, "rhs", *menu->strings[bit] == NUL - ? vim_strsave((char_u *)"<Nop>") - : str2special_save(menu->strings[bit], FALSE)); + ? (char_u *)"<Nop>" + : (tofree = str2special_save( + menu->strings[bit], FALSE))); + vim_free(tofree); + } if (status == OK) status = dict_add_bool(dict, "noremenu", menu->noremap[bit] == REMAP_NONE);
--- a/src/message.c +++ b/src/message.c @@ -865,6 +865,7 @@ emsg_namelen(char *msg, char_u *name, in char_u *copy = vim_strnsave((char_u *)name, len); semsg(msg, copy == NULL ? "NULL" : (char *)copy); + vim_free(copy); } /*
--- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1133,7 +1133,8 @@ do_source( { // Already loaded and no need to load again, return here. *ret_sid = sid; - return OK; + retval = OK; + goto theend; } #endif
--- a/src/userfunc.c +++ b/src/userfunc.c @@ -942,6 +942,8 @@ func_clear_items(ufunc_T *fp) ga_clear_strings(&(fp->uf_lines)); VIM_CLEAR(fp->uf_name_exp); VIM_CLEAR(fp->uf_arg_types); + VIM_CLEAR(fp->uf_def_arg_idx); + VIM_CLEAR(fp->uf_va_name); ga_clear(&fp->uf_type_list); #ifdef FEAT_PROFILE VIM_CLEAR(fp->uf_tml_count); @@ -3086,11 +3088,11 @@ ex_function(exarg_T *eap) erret: ga_clear_strings(&newargs); - ga_clear_strings(&argtypes); ga_clear_strings(&default_args); errret_2: ga_clear_strings(&newlines); ret_free: + ga_clear_strings(&argtypes); vim_free(skip_until); vim_free(line_to_free); vim_free(fudi.fd_newkey);