patch 9.0.0750: crash when popup closed in callback
Problem: Crash when popup closed in callback. (Maxim Kim)
Solution: In syntax_end_parsing() check that syn_block is valid.
diff --git a/src/drawscreen.c b/src/drawscreen.c
index d55c2ea..5a23d54 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -2486,7 +2486,7 @@
// Let the syntax stuff know we skipped a few lines.
if (syntax_last_parsed != 0 && syntax_last_parsed + 1 < lnum
&& syntax_present(wp))
- syntax_end_parsing(syntax_last_parsed + 1);
+ syntax_end_parsing(wp, syntax_last_parsed + 1);
#endif
// Display one line.
@@ -2601,7 +2601,7 @@
#ifdef FEAT_SYN_HL
// Let the syntax stuff know we stop parsing here.
if (syntax_last_parsed != 0 && syntax_present(wp))
- syntax_end_parsing(syntax_last_parsed + 1);
+ syntax_end_parsing(wp, syntax_last_parsed + 1);
#endif
// If we didn't hit the end of the file, and we didn't finish the last
diff --git a/src/proto/syntax.pro b/src/proto/syntax.pro
index c06498c..c51da7a 100644
--- a/src/proto/syntax.pro
+++ b/src/proto/syntax.pro
@@ -2,7 +2,7 @@
void syntax_start(win_T *wp, linenr_T lnum);
void syn_stack_free_all(synblock_T *block);
void syn_stack_apply_changes(buf_T *buf);
-void syntax_end_parsing(linenr_T lnum);
+void syntax_end_parsing(win_T *wp, linenr_T lnum);
int syntax_check_changed(linenr_T lnum);
int get_syntax_attr(colnr_T col, int *can_spell, int keep_state);
void syntax_clear(synblock_T *block);
diff --git a/src/syntax.c b/src/syntax.c
index ea8d541..468dee0 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1542,10 +1542,12 @@
* lnum -> line below window
*/
void
-syntax_end_parsing(linenr_T lnum)
+syntax_end_parsing(win_T *wp, linenr_T lnum)
{
synstate_T *sp;
+ if (syn_block != wp->w_s)
+ return; // not the right window
sp = syn_stack_find_entry(lnum);
if (sp != NULL && sp->sst_lnum < lnum)
sp = sp->sst_next;
diff --git a/src/version.c b/src/version.c
index 708e762..bd9915a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 750,
+/**/
749,
/**/
748,