mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.1.2018: using freed memory when out of memory and displaying message
Problem: Using freed memory when out of memory and displaying message. Solution: Make a copy of the message first.
This commit is contained in:
parent
96e38a86a7
commit
e5fbd73930
21
src/main.c
21
src/main.c
@ -1276,16 +1276,19 @@ main_loop(
|
||||
/* display message after redraw */
|
||||
if (keep_msg != NULL)
|
||||
{
|
||||
char_u *p;
|
||||
char_u *p = vim_strsave(keep_msg);
|
||||
|
||||
// msg_attr_keep() will set keep_msg to NULL, must free the
|
||||
// string here. Don't reset keep_msg, msg_attr_keep() uses it
|
||||
// to check for duplicates. Never put this message in history.
|
||||
p = keep_msg;
|
||||
msg_hist_off = TRUE;
|
||||
msg_attr((char *)p, keep_msg_attr);
|
||||
msg_hist_off = FALSE;
|
||||
vim_free(p);
|
||||
if (p != NULL)
|
||||
{
|
||||
// msg_start() will set keep_msg to NULL, make a copy
|
||||
// first. Don't reset keep_msg, msg_attr_keep() uses it to
|
||||
// check for duplicates. Never put this message in
|
||||
// history.
|
||||
msg_hist_off = TRUE;
|
||||
msg_attr((char *)p, keep_msg_attr);
|
||||
msg_hist_off = FALSE;
|
||||
vim_free(p);
|
||||
}
|
||||
}
|
||||
if (need_fileinfo) /* show file info after redraw */
|
||||
{
|
||||
|
@ -168,11 +168,6 @@ msg_attr_keep(
|
||||
ch_log(NULL, "ERROR: %s", (char *)s);
|
||||
#endif
|
||||
|
||||
/* When displaying keep_msg, don't let msg_start() free it, caller must do
|
||||
* that. */
|
||||
if ((char_u *)s == keep_msg)
|
||||
keep_msg = NULL;
|
||||
|
||||
/* Truncate the message if needed. */
|
||||
msg_start();
|
||||
buf = msg_strtrunc((char_u *)s, FALSE);
|
||||
|
13
src/normal.c
13
src/normal.c
@ -1182,12 +1182,17 @@ getcount:
|
||||
|
||||
kmsg = keep_msg;
|
||||
keep_msg = NULL;
|
||||
/* showmode() will clear keep_msg, but we want to use it anyway */
|
||||
// showmode() will clear keep_msg, but we want to use it anyway
|
||||
update_screen(0);
|
||||
/* now reset it, otherwise it's put in the history again */
|
||||
// now reset it, otherwise it's put in the history again
|
||||
keep_msg = kmsg;
|
||||
msg_attr((char *)kmsg, keep_msg_attr);
|
||||
vim_free(kmsg);
|
||||
|
||||
kmsg = vim_strsave(keep_msg);
|
||||
if (kmsg != NULL)
|
||||
{
|
||||
msg_attr((char *)kmsg, keep_msg_attr);
|
||||
vim_free(kmsg);
|
||||
}
|
||||
}
|
||||
setcursor();
|
||||
cursor_on();
|
||||
|
@ -757,6 +757,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2018,
|
||||
/**/
|
||||
2017,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user