# HG changeset patch # User mullan # Date 1405512458 14400 # Node ID 4ef885b4c7c63d71c579b71594fe732b64f5aa4e # Parent e623ca817d50a3cd23f86285ab40d5878d921db1# Parent c751d10101646a0d3015711d4f4870b39dc12dcd Merge diff -r e623ca817d50 -r 4ef885b4c7c6 jdk/src/share/classes/java/util/regex/Pattern.java --- a/jdk/src/share/classes/java/util/regex/Pattern.java Wed Jul 16 08:06:40 2014 -0400 +++ b/jdk/src/share/classes/java/util/regex/Pattern.java Wed Jul 16 08:07:38 2014 -0400 @@ -917,6 +917,13 @@ */ public static final int UNICODE_CHARACTER_CLASS = 0x100; + /** + * Contains all possible flags for compile(regex, flags). + */ + private static final int ALL_FLAGS = CASE_INSENSITIVE | MULTILINE | + DOTALL | UNICODE_CASE | CANON_EQ | UNIX_LINES | LITERAL | + UNICODE_CHARACTER_CLASS | COMMENTS; + /* Pattern has only two serialized components: The pattern string * and the flags, which are all that is needed to recompile the pattern * when it is deserialized. @@ -1336,6 +1343,10 @@ * only a Start node and a LastNode node. */ private Pattern(String p, int f) { + if ((f & ~ALL_FLAGS) != 0) { + throw new IllegalArgumentException("Unknown flag 0x" + + Integer.toHexString(f)); + } pattern = p; flags = f; diff -r e623ca817d50 -r 4ef885b4c7c6 jdk/test/java/util/regex/RegExTest.java --- a/jdk/test/java/util/regex/RegExTest.java Wed Jul 16 08:06:40 2014 -0400 +++ b/jdk/test/java/util/regex/RegExTest.java Wed Jul 16 08:07:38 2014 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2014, 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 @@ -32,7 +32,7 @@ * 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 8023647 6559590 - * 8027645 8035076 8039124 + * 8027645 8035076 8039124 8035975 */ import java.util.regex.*; @@ -150,6 +150,7 @@ groupCurlyNotFoundSuppTest(); groupCurlyBackoffTest(); patternAsPredicate(); + invalidFlags(); if (failure) { throw new @@ -4457,4 +4458,30 @@ } report("Pattern.asPredicate"); } + + // This test is for 8035975 + private static void invalidFlags() throws Exception { + for (int flag = 1; flag != 0; flag <<= 1) { + switch (flag) { + case Pattern.CASE_INSENSITIVE: + case Pattern.MULTILINE: + case Pattern.DOTALL: + case Pattern.UNICODE_CASE: + case Pattern.CANON_EQ: + case Pattern.UNIX_LINES: + case Pattern.LITERAL: + case Pattern.UNICODE_CHARACTER_CLASS: + case Pattern.COMMENTS: + // valid flag, continue + break; + default: + try { + Pattern.compile(".", flag); + failCount++; + } catch (IllegalArgumentException expected) { + } + } + } + report("Invalid compile flags"); + } }