changeset 30831:fbeebe308514 v9.0.0750

patch 9.0.0750: crash when popup closed in callback Commit: https://github.com/vim/vim/commit/0abd6cf62d65180dc2c40d67cd95f13b0691f7ea Author: Bram Moolenaar <Bram@vim.org> Date: Fri Oct 14 17:04:09 2022 +0100 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.
author Bram Moolenaar <Bram@vim.org>
date Fri, 14 Oct 2022 18:15:03 +0200
parents 22917862ac81
children 64fffffc3295
files src/drawscreen.c src/proto/syntax.pro src/syntax.c src/version.c
diffstat 4 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -2486,7 +2486,7 @@ win_update(win_T *wp)
 		// 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 @@ win_update(win_T *wp)
 #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
--- 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);
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1542,10 +1542,12 @@ syn_stack_equal(synstate_T *sp)
  * 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;
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    750,
+/**/
     749,
 /**/
     748,