diff options
Diffstat (limited to 'lisp/re')
-rw-r--r-- | lisp/re/re.c | 3 | ||||
-rw-r--r-- | lisp/re/tests.c | 2 | ||||
-rw-r--r-- | lisp/re/tests.txt | 9 |
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 |