Mercurial > hg > openjdk > aarch64-port > jdk
changeset 7988:3f6777cbfe69
8023647: "abc1c".matches("(\\w)+1\\1")) returns false
Summary: to correct the wrong GroupCurly group index backoff code
Reviewed-by: alanb
author | sherman |
---|---|
date | Tue, 27 Aug 2013 12:54:44 -0700 |
parents | ade440668f94 |
children | be2d25a277a7 |
files | src/share/classes/java/util/regex/Pattern.java test/java/util/regex/RegExTest.java |
diffstat | 2 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/util/regex/Pattern.java Mon Aug 26 22:32:50 2013 -0700 +++ b/src/share/classes/java/util/regex/Pattern.java Tue Aug 27 12:54:44 2013 -0700 @@ -4456,16 +4456,16 @@ groups[groupIndex+1] = i; groups[groupIndex] = i - k; } - i = i - k; return true; } // backing off + i = i - k; if (capture) { groups[groupIndex+1] = i; groups[groupIndex] = i - k; } - i = i - k; j--; + } break; } @@ -4883,7 +4883,6 @@ int k = matcher.groups[groupIndex+1]; int groupSize = k - j; - // If the referenced group didn't match, neither can this if (j < 0) return false; @@ -4893,7 +4892,6 @@ matcher.hitEnd = true; return false; } - // Check each new char to make sure it matches what the group // referenced matched last time around for (int index=0; index<groupSize; index++)
--- a/test/java/util/regex/RegExTest.java Mon Aug 26 22:32:50 2013 -0700 +++ b/test/java/util/regex/RegExTest.java Tue Aug 27 12:54:44 2013 -0700 @@ -33,7 +33,7 @@ * 5013885 5003322 4988891 5098443 5110268 6173522 4829857 5027748 6376940 * 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133 * 6350801 6676425 6878475 6919132 6931676 6948903 6990617 7014645 7039066 - * 7067045 7014640 7189363 8007395 8013252 8013254 8012646 + * 7067045 7014640 7189363 8007395 8013252 8013254 8012646 8023647 */ import java.util.regex.*; @@ -146,6 +146,7 @@ linebreakTest(); branchTest(); groupCurlyNotFoundSuppTest(); + groupCurlyBackoffTest(); patternAsPredicate(); if (failure) { throw new @@ -3999,6 +4000,15 @@ report("GroupCurly NotFoundSupp"); } + // This test is for 8023647 + private static void groupCurlyBackoffTest() throws Exception { + if (!"abc1c".matches("(\\w)+1\\1") || + "abc11".matches("(\\w)+1\\1")) { + failCount++; + } + report("GroupCurly backoff"); + } + // This test is for 8012646 private static void patternAsPredicate() throws Exception { Predicate<String> p = Pattern.compile("[a-z]+").asPredicate();