diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/re/re.c | 3 | ||||
-rw-r--r-- | lisp/re/tests.c | 2 | ||||
-rw-r--r-- | lisp/re/tests.txt | 9 | ||||
-rw-r--r-- | lisp/test/regex.lsp | 11 |
4 files changed, 23 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 diff --git a/lisp/test/regex.lsp b/lisp/test/regex.lsp index fa6b2fe..9e28efa 100644 --- a/lisp/test/regex.lsp +++ b/lisp/test/regex.lsp @@ -438,3 +438,14 @@ foo" :notbol t :noteol t) (setq re (re-comp "(.*a)?")) (re-test '((0 . 1)) re "aaaa") ; expected, minimal match (re-test '((0 . 1) (0 . 1)) re "aaaa" :count 2) + + +;; Tue Dec 11 22:22:51 BRST 2007 Fix a regression with the pattern below +;; returning a match to an empty string. +;; Note that inverting the order of the "alternatives" works with the +;; versions of libre prior to this (one line) fix +(setq re (re-comp "\\\\\\d{3}|\\\\.")) +(re-test :nomatch re "\\") +;; previous version should work with the pattern inverted +(setq re (re-comp "\\\\.|\\\\\\d{3}")) +(re-test :nomatch re "\\") |