summaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorChristian Brabandt <cb@256bit.org>2023-10-11 21:08:13 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-11 21:09:53 +0200
commit41e6f7d6ba67b61d911f9b1d76325cd79224753d (patch)
treed2b6fcf5f7daa4712502d693635bcc3125bc38ca /src/buffer.c
parent54844857fd6933fa4f6678e47610c4b9c9f7a091 (diff)
patch 9.0.2010: [security] use-after-free from buf_contents_changed()v9.0.2010
Problem: [security] use-after-free from buf_contents_changed() Solution: block autocommands Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/buffer.c b/src/buffer.c
index 93f9245f27..9ee74f54dd 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -6013,6 +6013,9 @@ buf_contents_changed(buf_T *buf)
return TRUE;
}
+ // We don't want to trigger autocommands now, they may have nasty
+ // side-effects like wiping buffers
+ block_autocmds();
if (ml_open(curbuf) == OK
&& readfile(buf->b_ffname, buf->b_fname,
(linenr_T)0, (linenr_T)0, (linenr_T)MAXLNUM,
@@ -6038,6 +6041,8 @@ buf_contents_changed(buf_T *buf)
if (curbuf != newbuf) // safety check
wipe_buffer(newbuf, FALSE);
+ unblock_autocmds();
+
return differ;
}