diff src/search.c @ 15083:70aa5caa9f0d v8.1.0552

patch 8.1.0552: saved last search pattern may not be restored commit https://github.com/vim/vim/commit/01a060da74b756b161e595b39a7877cb7612120a Author: Bram Moolenaar <Bram@vim.org> Date: Fri Nov 30 21:57:55 2018 +0100 patch 8.1.0552: saved last search pattern may not be restored Problem: Saved last search pattern may not be restored. Solution: Call restore_last_search_pattern(). Add a check for balancing saving and restoring the last search pattern.
author Bram Moolenaar <Bram@vim.org>
date Fri, 30 Nov 2018 22:00:06 +0100
parents 6e4e0d43b20b
children e428882d6ffb
line wrap: on
line diff
--- a/src/search.c
+++ b/src/search.c
@@ -96,6 +96,7 @@ static struct spat  saved_spats[2];
 /* copy of spats[RE_SEARCH], for keeping the search patterns while incremental
  * searching */
 static struct spat  saved_last_search_spat;
+static int	    did_save_last_search_spat = 0;
 static int	    saved_last_idx = 0;
 static int	    saved_no_hlsearch = 0;
 # endif
@@ -364,6 +365,11 @@ free_search_patterns(void)
     void
 save_last_search_pattern(void)
 {
+    if (did_save_last_search_spat != 0)
+	IEMSG("did_save_last_search_spat is not zero");
+    else
+	++did_save_last_search_spat;
+
     saved_last_search_spat = spats[RE_SEARCH];
     if (spats[RE_SEARCH].pat != NULL)
 	saved_last_search_spat.pat = vim_strsave(spats[RE_SEARCH].pat);
@@ -374,8 +380,16 @@ save_last_search_pattern(void)
     void
 restore_last_search_pattern(void)
 {
+    if (did_save_last_search_spat != 1)
+    {
+	IEMSG("did_save_last_search_spat is not one");
+	return;
+    }
+    --did_save_last_search_spat;
+
     vim_free(spats[RE_SEARCH].pat);
     spats[RE_SEARCH] = saved_last_search_spat;
+    saved_last_search_spat.pat = NULL;
 # if defined(FEAT_EVAL)
     set_vv_searchforward();
 # endif