summaryrefslogtreecommitdiff
path: root/lisp/re
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/re')
-rw-r--r--lisp/re/re.c3
-rw-r--r--lisp/re/tests.c2
-rw-r--r--lisp/re/tests.txt9
3 files changed, 12 insertions, 2 deletions
diff --git a/lisp/re/re.c b/lisp/re/re.c
index abf5cc4..fca7e28 100644
--- a/lisp/re/re.c
+++ b/lisp/re/re.c
@@ -782,7 +782,8 @@ next_lcstl:;
case Re_AltNext:
bas = eng.off - 1;
/* Check if matched and if it is a better match */
- if (eng.sv[eng.off] - eng.so[eng.off] <
+ if (eng.eo[eng.off] >= eng.so[eng.off] &&
+ eng.sv[eng.off] - eng.so[eng.off] <
eng.eo[eng.off] - eng.so[eng.off])
eng.sv[eng.off] = eng.eo[eng.off];
diff --git a/lisp/re/tests.c b/lisp/re/tests.c
index 6a82d41..21b1e10 100644
--- a/lisp/re/tests.c
+++ b/lisp/re/tests.c
@@ -164,7 +164,7 @@ main(int argc, char *argv[])
else {
if (failed) {
reerror(failed, &cod, buf, sizeof(buf));
- fprintf(stderr, "%s, at line %d\n", line);
+ fprintf(stderr, "%s, at line %d\n", buf, line);
break;
}
if (sscanf(buf, "%ld,%ld:", &so, &eo) != 2) {
diff --git a/lisp/re/tests.txt b/lisp/re/tests.txt
index b8d3e22..35fd90b 100644
--- a/lisp/re/tests.txt
+++ b/lisp/re/tests.txt
@@ -459,3 +459,12 @@
/.*(\d+)/
:BADRPT
+
+# Regression fix, was matching empty string
+/\\\d{3}|\\./
+>\\
+:NOMATCH
+
+/\\.|\\\d{3}/
+>\\
+:NOMATCH