aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-06-24 23:31:33 -0400
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-06-24 23:34:17 -0400
commitdfd050867b92718ff025fffe81a581b1da1511ae (patch)
tree924547807b96977b8e5b4feaab533f338b3ed047
parent615fc6826359b4171fbb40ea34ba7ddf29bea045 (diff)
downloadrneovim-dfd050867b92718ff025fffe81a581b1da1511ae.tar.gz
rneovim-dfd050867b92718ff025fffe81a581b1da1511ae.tar.bz2
rneovim-dfd050867b92718ff025fffe81a581b1da1511ae.zip
vim-patch:8.1.0437: may access freed memory when syntax HL times out
Problem: May access freed memory when syntax HL times out. (Philipp Gesang) Solution: Clear b_sst_first when clearing b_sst_array. https://github.com/vim/vim/commit/95892c27b242cdbc78e622c7a861a4e15aec7a30
-rw-r--r--src/nvim/syntax.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index 418756abc4..4d3003a1fa 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -997,6 +997,7 @@ static void syn_stack_free_block(synblock_T *block)
clear_syn_state(p);
}
XFREE_CLEAR(block->b_sst_array);
+ block->b_sst_first = NULL;
block->b_sst_len = 0;
}
}
@@ -1108,9 +1109,6 @@ static void syn_stack_apply_changes_block(synblock_T *block, buf_T *buf)
synstate_T *p, *prev, *np;
linenr_T n;
- if (block->b_sst_array == NULL) /* nothing to do */
- return;
-
prev = NULL;
for (p = block->b_sst_first; p != NULL; ) {
if (p->sst_lnum + block->b_syn_sync_linebreaks > buf->b_mod_top) {
@@ -1158,8 +1156,9 @@ static int syn_stack_cleanup(void)
int dist;
int retval = FALSE;
- if (syn_block->b_sst_array == NULL || syn_block->b_sst_first == NULL)
+ if (syn_block->b_sst_first == NULL) {
return retval;
+ }
/* Compute normal distance between non-displayed entries. */
if (syn_block->b_sst_len <= Rows)