Commits

Bram Moolenaar  committed eff686f

updated for version 7.3.265
Problem: When storing a pattern in search history there is no proper check
for the separator character.
Solution: Pass the separator character to in_history(). (Muraoka Taro)

  • Participants
  • Parent commits 9f9ef3f
  • Tags v7-3-265

Comments (0)

Files changed (2)

File src/ex_getln.c

 
 static int	hist_char2type __ARGS((int c));
 
-static int	in_history __ARGS((int, char_u *, int));
+static int	in_history __ARGS((int, char_u *, int, int));
 # ifdef FEAT_EVAL
 static int	calc_hist_idx __ARGS((int histype, int num));
 # endif
  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
  */
     static int
-in_history(type, str, move_to_front)
+in_history(type, str, move_to_front, sep)
     int	    type;
     char_u  *str;
     int	    move_to_front;	/* Move the entry to the front if it exists */
+    int	    sep;
 {
     int	    i;
     int	    last_i = -1;
+    char_u  *p;
 
     if (hisidx[type] < 0)
 	return FALSE;
     {
 	if (history[type][i].hisstr == NULL)
 	    return FALSE;
-	if (STRCMP(str, history[type][i].hisstr) == 0)
+
+	/* For search history, check that the separator character matches as
+	 * well. */
+	p = history[type][i].hisstr;
+	if (STRCMP(str, p) == 0
+		&& (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
 	{
 	    if (!move_to_front)
 		return TRUE;
 	}
 	last_maptick = -1;
     }
-    if (!in_history(histype, new_entry, TRUE))
+    if (!in_history(histype, new_entry, TRUE, sep))
     {
 	if (++hisidx[histype] == hislen)
 	    hisidx[histype] = 0;
 	if (val != NULL && *val != NUL)
 	{
 	    if (!in_history(type, val + (type == HIST_SEARCH),
-							viminfo_add_at_front))
+						  viminfo_add_at_front, *val))
 	    {
 		/* Need to re-allocate to append the separator byte. */
 		len = STRLEN(val);

File src/version.c

 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    265,
+/**/
     264,
 /**/
     263,