diff src/tag.c @ 30106:0e9b58353412 v9.0.0389

patch 9.0.0389: crash when 'tagfunc' closes the window Commit: https://github.com/vim/vim/commit/ccfde4d028e891a41e3548323c3d47b06fb0b83e Author: Bram Moolenaar <Bram@vim.org> Date: Mon Sep 5 19:51:13 2022 +0100 patch 9.0.0389: crash when 'tagfunc' closes the window Problem: Crash when 'tagfunc' closes the window. Solution: Bail out when the window was closed.
author Bram Moolenaar <Bram@vim.org>
date Mon, 05 Sep 2022 21:00:03 +0200
parents f4a7831fa352
children 360f286b5869
line wrap: on
line diff
--- a/src/tag.c
+++ b/src/tag.c
@@ -690,6 +690,16 @@ do_tag(
 		max_num_matches = MAXCOL; // If less than max_num_matches
 					  // found: all matches found.
 
+	    // A tag function may do anything, which may cause various
+	    // information to become invalid.  At least check for the tagstack
+	    // to still be the same.
+	    if (tagstack != curwin->w_tagstack)
+	    {
+		emsg(_(e_window_unexpectedly_close_while_searching_for_tags));
+		FreeWild(new_num_matches, new_matches);
+		break;
+	    }
+
 	    // If there already were some matches for the same name, move them
 	    // to the start.  Avoids that the order changes when using
 	    // ":tnext" and jumping to another file.