changeset 4893:07b9c48a30e9 v7.3.1192

updated for version 7.3.1192 Problem: Valgrind reports errors when using backreferences. (Dominique Pelle) Solution: Do not check the end of submatches.
author Bram Moolenaar <bram@vim.org>
date Fri, 14 Jun 2013 21:15:25 +0200
parents c2b5b3ead8e9
children 7e2fea45e480
files src/regexp_nfa.c src/version.c
diffstat 2 files changed, 11 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -3612,7 +3612,7 @@ copy_sub_off(to, from)
 }
 
 /*
- * Return TRUE if "sub1" and "sub2" have the same positions.
+ * Return TRUE if "sub1" and "sub2" have the same start positions.
  */
     static int
 sub_equal(sub1, sub2)
@@ -3621,10 +3621,10 @@ sub_equal(sub1, sub2)
 {
     int		i;
     int		todo;
-    linenr_T	s1, e1;
-    linenr_T	s2, e2;
-    char_u	*sp1, *ep1;
-    char_u	*sp2, *ep2;
+    linenr_T	s1;
+    linenr_T	s2;
+    char_u	*sp1;
+    char_u	*sp2;
 
     todo = sub1->in_use > sub2->in_use ? sub1->in_use : sub2->in_use;
     if (REG_MULTI)
@@ -3632,33 +3632,18 @@ sub_equal(sub1, sub2)
 	for (i = 0; i < todo; ++i)
 	{
 	    if (i < sub1->in_use)
-	    {
 		s1 = sub1->list.multi[i].start.lnum;
-		e1 = sub1->list.multi[i].end.lnum;
-	    }
 	    else
-	    {
 		s1 = 0;
-		e1 = 0;
-	    }
 	    if (i < sub2->in_use)
-	    {
 		s2 = sub2->list.multi[i].start.lnum;
-		e2 = sub2->list.multi[i].end.lnum;
-	    }
 	    else
-	    {
 		s2 = 0;
-		e2 = 0;
-	    }
-	    if (s1 != s2 || e1 != e2)
+	    if (s1 != s2)
 		return FALSE;
 	    if (s1 != 0 && sub1->list.multi[i].start.col
 					     != sub2->list.multi[i].start.col)
 		return FALSE;
-	    if (e1 != 0 && sub1->list.multi[i].end.col
-					     != sub2->list.multi[i].end.col)
-		return FALSE;
 	}
     }
     else
@@ -3666,26 +3651,14 @@ sub_equal(sub1, sub2)
 	for (i = 0; i < todo; ++i)
 	{
 	    if (i < sub1->in_use)
-	    {
 		sp1 = sub1->list.line[i].start;
-		ep1 = sub1->list.line[i].end;
-	    }
 	    else
-	    {
 		sp1 = NULL;
-		ep1 = NULL;
-	    }
 	    if (i < sub2->in_use)
-	    {
 		sp2 = sub2->list.line[i].start;
-		ep2 = sub2->list.line[i].end;
-	    }
 	    else
-	    {
 		sp2 = NULL;
-		ep2 = NULL;
-	    }
-	    if (sp1 != sp2 || ep1 != ep2)
+	    if (sp1 != sp2)
 		return FALSE;
 	}
     }
@@ -3735,8 +3708,8 @@ has_state_with_pos(l, state, subs)
 	if (thread->state->id == state->id
 		&& sub_equal(&thread->subs.norm, &subs->norm)
 #ifdef FEAT_SYN_HL
-		&& (!nfa_has_zsubexpr ||
-		       sub_equal(&thread->subs.synt, &subs->synt))
+		&& (!nfa_has_zsubexpr
+				|| sub_equal(&thread->subs.synt, &subs->synt))
 #endif
 			      )
 	    return TRUE;
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1192,
+/**/
     1191,
 /**/
     1190,