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.
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index 753733d..2d1df6d 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -1089,8 +1089,9 @@
* 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 @@
/* 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 @@
TRY_NEG();
EMIT_GLUE();
}
- emit_range = FALSE;
}
else
#endif
@@ -1190,8 +1187,9 @@
TRY_NEG();
EMIT_GLUE();
}
- emit_range = FALSE;
}
+ emit_range = FALSE;
+ startc = -1;
}
else
{