changeset 4677:c1622ff9ed8d v7.3.1086

updated for version 7.3.1086 Problem: Old regexp engine accepts illegal range, new one doesn't. Solution: Also accept the illegal range with the new engine.
author Bram Moolenaar <bram@vim.org>
date Sat, 01 Jun 2013 13:24:24 +0200
parents 9d3768ec9d74
children 2425a12d8e45
files src/regexp_nfa.c src/testdir/test64.in src/testdir/test64.ok src/version.c
diffstat 4 files changed, 14 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -1089,8 +1089,9 @@ collection:
 			     * while loop. */
 			}
 		    }
-		    /* Try a range like 'a-x' or '\t-z' */
-		    if (*regparse == '-')
+		    /* Try a range like 'a-x' or '\t-z'. Also allows '-' as a
+		     * start character. */
+		    if (*regparse == '-' && oldstartc != -1)
 		    {
 			emit_range = TRUE;
 			startc = oldstartc;
@@ -1140,16 +1141,13 @@ collection:
 
 		    /* Normal printable char */
 		    if (startc == -1)
-#ifdef FEAT_MBYTE
-			startc = (*mb_ptr2char)(regparse);
-#else
-		    startc = *regparse;
-#endif
+			startc = PTR2CHAR(regparse);
 
 		    /* Previous char was '-', so this char is end of range. */
 		    if (emit_range)
 		    {
-			endc = startc; startc = oldstartc;
+			endc = startc;
+			startc = oldstartc;
 			if (startc > endc)
 			    EMSG_RET_FAIL(_(e_invrange));
 #ifdef FEAT_MBYTE
@@ -1166,7 +1164,6 @@ collection:
 				TRY_NEG();
 				EMIT_GLUE();
 			    }
-			    emit_range = FALSE;
 			}
 			else
 #endif
@@ -1190,8 +1187,9 @@ collection:
 				    TRY_NEG();
 				    EMIT_GLUE();
 				}
-			    emit_range = FALSE;
 			}
+			emit_range = FALSE;
+			startc = -1;
 		    }
 		    else
 		    {
--- a/src/testdir/test64.in
+++ b/src/testdir/test64.in
@@ -270,6 +270,7 @@ STARTTEST
 :call add(tl, [2, '\_[0-9]\+', "asfi\n9888u", "\n9888"])
 :call add(tl, [2, '\_f', "  \na ", "\n"])
 :call add(tl, [2, '\_f\+', "  \na ", "\na"])
+:call add(tl, [2, '[0-9A-Za-z-_.]\+', " @0_a.A-{ ", "0_a.A-"])
 :"
 :"""" Test start/end of line, start/end of file
 :call add(tl, [2, '^a.', "a_\nb ", "a_"])
--- a/src/testdir/test64.ok
+++ b/src/testdir/test64.ok
@@ -605,6 +605,9 @@ OK 2 - \_f
 OK 0 - \_f\+
 OK 1 - \_f\+
 OK 2 - \_f\+
+OK 0 - [0-9A-Za-z-_.]\+
+OK 1 - [0-9A-Za-z-_.]\+
+OK 2 - [0-9A-Za-z-_.]\+
 OK 0 - ^a.
 OK 1 - ^a.
 OK 2 - ^a.
--- 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 */
 /**/
+    1086,
+/**/
     1085,
 /**/
     1084,