0
0
mirror of https://github.com/vim/vim.git synced 2025-10-02 05:04:20 -04:00

patch 8.2.0399: various memory leaks

Problem:    Various memory leaks.
Solution:   Avoid the leaks. (Ozaki Kiichi, closes #5803)
This commit is contained in:
Bram Moolenaar
2020-03-18 15:23:16 +01:00
parent a21df1db3c
commit 292b90d4fa
7 changed files with 29 additions and 4 deletions

View File

@@ -1346,6 +1346,18 @@ do_cmdline(
restore_dbg_stuff(&debug_saved); restore_dbg_stuff(&debug_saved);
msg_list = saved_msg_list; 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 #endif // FEAT_EVAL
/* /*

View File

@@ -4188,6 +4188,7 @@ open_cmdwin(void)
if (win_split((int)p_cwh, WSP_BOT) == FAIL) if (win_split((int)p_cwh, WSP_BOT) == FAIL)
{ {
beep_flush(); beep_flush();
ga_clear(&winsizes);
return K_IGNORE; return K_IGNORE;
} }
cmdwin_type = get_cmdline_type(); cmdwin_type = get_cmdline_type();

View File

@@ -2882,10 +2882,16 @@ menuitem_getinfo(vimmenu_T *menu, int modes, dict_T *dict)
if (bit < MENU_MODES) // just in case, avoid Coverity warning if (bit < MENU_MODES) // just in case, avoid Coverity warning
{ {
if (menu->strings[bit] != NULL) if (menu->strings[bit] != NULL)
{
char_u *tofree = NULL;
status = dict_add_string(dict, "rhs", status = dict_add_string(dict, "rhs",
*menu->strings[bit] == NUL *menu->strings[bit] == NUL
? vim_strsave((char_u *)"<Nop>") ? (char_u *)"<Nop>"
: str2special_save(menu->strings[bit], FALSE)); : (tofree = str2special_save(
menu->strings[bit], FALSE)));
vim_free(tofree);
}
if (status == OK) if (status == OK)
status = dict_add_bool(dict, "noremenu", status = dict_add_bool(dict, "noremenu",
menu->noremap[bit] == REMAP_NONE); menu->noremap[bit] == REMAP_NONE);

View File

@@ -865,6 +865,7 @@ emsg_namelen(char *msg, char_u *name, int len)
char_u *copy = vim_strnsave((char_u *)name, len); char_u *copy = vim_strnsave((char_u *)name, len);
semsg(msg, copy == NULL ? "NULL" : (char *)copy); semsg(msg, copy == NULL ? "NULL" : (char *)copy);
vim_free(copy);
} }
/* /*

View File

@@ -1133,7 +1133,8 @@ do_source(
{ {
// Already loaded and no need to load again, return here. // Already loaded and no need to load again, return here.
*ret_sid = sid; *ret_sid = sid;
return OK; retval = OK;
goto theend;
} }
#endif #endif

View File

@@ -942,6 +942,8 @@ func_clear_items(ufunc_T *fp)
ga_clear_strings(&(fp->uf_lines)); ga_clear_strings(&(fp->uf_lines));
VIM_CLEAR(fp->uf_name_exp); VIM_CLEAR(fp->uf_name_exp);
VIM_CLEAR(fp->uf_arg_types); 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); ga_clear(&fp->uf_type_list);
#ifdef FEAT_PROFILE #ifdef FEAT_PROFILE
VIM_CLEAR(fp->uf_tml_count); VIM_CLEAR(fp->uf_tml_count);
@@ -3086,11 +3088,11 @@ ex_function(exarg_T *eap)
erret: erret:
ga_clear_strings(&newargs); ga_clear_strings(&newargs);
ga_clear_strings(&argtypes);
ga_clear_strings(&default_args); ga_clear_strings(&default_args);
errret_2: errret_2:
ga_clear_strings(&newlines); ga_clear_strings(&newlines);
ret_free: ret_free:
ga_clear_strings(&argtypes);
vim_free(skip_until); vim_free(skip_until);
vim_free(line_to_free); vim_free(line_to_free);
vim_free(fudi.fd_newkey); vim_free(fudi.fd_newkey);

View File

@@ -738,6 +738,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
399,
/**/ /**/
398, 398,
/**/ /**/