0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 8.2.0381: using freed memory with :lvimgrep and autocommand

Problem:    Using freed memory with :lvimgrep and autocommand. (extracted from
            POC by Dominique Pelle)
Solution:   Avoid deleting a dummy buffer used in a window. (closes #5777)
This commit is contained in:
Bram Moolenaar
2020-03-14 17:21:34 +01:00
parent 1939826509
commit 2573af3519
3 changed files with 30 additions and 1 deletions

View File

@@ -6268,7 +6268,26 @@ load_dummy_buffer(
static void
wipe_dummy_buffer(buf_T *buf, char_u *dirname_start)
{
if (curbuf != buf) // safety check
// If any autocommand opened a window on the dummy buffer, close that
// window. If we can't close them all then give up.
while (buf->b_nwindows > 0)
{
int did_one = FALSE;
win_T *wp;
if (firstwin->w_next != NULL)
for (wp = firstwin; wp != NULL; wp = wp->w_next)
if (wp->w_buffer == buf)
{
if (win_close(wp, FALSE) == OK)
did_one = TRUE;
break;
}
if (!did_one)
return;
}
if (curbuf != buf && buf->b_nwindows == 0) // safety check
{
#if defined(FEAT_EVAL)
cleanup_T cs;