summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-04-16 16:49:24 +0100
committerBram Moolenaar <Bram@vim.org>2022-04-16 16:49:24 +0100
commitca7e86c23789eb0ed8f6400f25ea9e0e1036f9fc (patch)
treead44a49e8abeb22729ae8546bfcbcc9db887eb08
parente0805b849ce60f65149903b63584d49bf81f975e (diff)
patch 8.2.4762: using freed memory using synstack() and synID() in WinEnterv8.2.4762
Problem: Using freed memory when using synstack() and synID() in WinEnter. Solution: Check using the syntax window. (closes #10204)
-rw-r--r--src/syntax.c5
-rw-r--r--src/testdir/test_syntax.vim13
-rw-r--r--src/version.c2
3 files changed, 18 insertions, 2 deletions
diff --git a/src/syntax.c b/src/syntax.c
index 086d9d755e..6b71e8dfab 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6486,8 +6486,9 @@ syn_get_id(
int keep_state) // keep state of char at "col"
{
// When the position is not after the current position and in the same
- // line of the same buffer, need to restart parsing.
- if (wp->w_buffer != syn_buf
+ // line of the same window with the same buffer, need to restart parsing.
+ if (wp != syn_win
+ || wp->w_buffer != syn_buf
|| lnum != current_lnum
|| col < current_col)
syntax_start(wp, lnum);
diff --git a/src/testdir/test_syntax.vim b/src/testdir/test_syntax.vim
index 14ae4c575f..be2f458287 100644
--- a/src/testdir/test_syntax.vim
+++ b/src/testdir/test_syntax.vim
@@ -956,5 +956,18 @@ func Test_syn_include_contains_TOP()
bw!
endfunc
+" This was using freed memory
+func Test_WinEnter_synstack_synID()
+ autocmd WinEnter * call synstack(line("."), col("."))
+ autocmd WinEnter * call synID(line('.'), col('.') - 1, 1)
+ call setline(1, 'aaaaa')
+ normal! $
+ new
+ close
+
+ au! WinEnter
+ bw!
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 19391268ff..1cc0d906b1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4762,
+/**/
4761,
/**/
4760,