--- a/test/jdk/java/util/regex/RegExTest.java Thu Oct 17 20:27:44 2019 +0100
+++ b/test/jdk/java/util/regex/RegExTest.java Thu Oct 17 20:53:35 2019 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,7 @@
* 8027645 8035076 8039124 8035975 8074678 6854417 8143854 8147531 7071819
* 8151481 4867170 7080302 6728861 6995635 6736245 4916384 6328855 6192895
* 6345469 6988218 6693451 7006761 8140212 8143282 8158482 8176029 8184706
- * 8194667 8197462 8184692 8221431
+ * 8194667 8197462 8184692 8221431 8224789 8228352 8230829
*
* @library /test/lib
* @library /lib/testlibrary/java/lang
@@ -44,15 +44,28 @@
* @key randomness
*/
-import java.util.function.Function;
-import java.util.regex.*;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.math.BigInteger;
+import java.nio.CharBuffer;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.Random;
import java.util.Scanner;
-import java.io.*;
-import java.nio.file.*;
-import java.util.*;
-import java.nio.CharBuffer;
+import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.regex.Matcher;
+import java.util.regex.MatchResult;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
import jdk.test.lib.RandomFactory;
/**
@@ -171,6 +184,8 @@
grapheme();
expoBacktracking();
invalidGroupName();
+ illegalRepetitionRange();
+ surrogatePairWithCanonEq();
if (failure) {
throw new
@@ -1055,6 +1070,22 @@
matcher.useAnchoringBounds(false);
if (matcher.find())
failCount++;
+
+ // JDK-8230829
+ pattern = Pattern.compile("\\ud800\\udc61");
+ matcher = pattern.matcher("\ud800\udc61");
+ matcher.region(0, 1);
+ if (matcher.find()) {
+ failCount++;
+ System.out.println("Matched a surrogate pair" +
+ " that crosses border of region");
+ }
+ if (!matcher.hitEnd()) {
+ failCount++;
+ System.out.println("Expected to hit the end when" +
+ " matching a surrogate pair crossing region");
+ }
+
report("Regions");
}
@@ -4932,4 +4963,41 @@
}
report("Invalid capturing group names");
}
+
+ private static void illegalRepetitionRange() {
+ // huge integers > (2^31 - 1)
+ String n = BigInteger.valueOf(1L << 32)
+ .toString();
+ String m = BigInteger.valueOf(1L << 31)
+ .add(new BigInteger(80, generator))
+ .toString();
+ for (String rep : List.of("", "x", ".", ",", "-1", "2,1",
+ n, n + ",", "0," + n, n + "," + m, m, m + ",", "0," + m)) {
+ String pat = ".{" + rep + "}";
+ try {
+ Pattern.compile(pat);
+ failCount++;
+ System.out.println("Expected to fail. Pattern: " + pat);
+ } catch (PatternSyntaxException e) {
+ if (!e.getMessage().startsWith("Illegal repetition")) {
+ failCount++;
+ System.out.println("Unexpected error message: " + e.getMessage());
+ }
+ } catch (Throwable t) {
+ failCount++;
+ System.out.println("Unexpected exception: " + t);
+ }
+ }
+ report("illegalRepetitionRange");
+ }
+
+ private static void surrogatePairWithCanonEq() {
+ try {
+ Pattern.compile("\ud834\udd21", Pattern.CANON_EQ);
+ } catch (Throwable t) {
+ failCount++;
+ System.out.println("Unexpected exception: " + t);
+ }
+ report("surrogatePairWithCanonEq");
+ }
}