# HG changeset patch # User redestad # Date 1500051178 -7200 # Fri Jul 14 18:52:58 2017 +0200 # Node ID b530059f85f12319cc7819a398d4226d4f0830ae # Parent 7bdb59123fe516a4a9170a43581047390c52e372 8184665: Skip name and alias checks for standard Charsets Reviewed-by: sherman, rriggs diff --git a/src/java.base/share/classes/java/nio/charset/Charset.java b/src/java.base/share/classes/java/nio/charset/Charset.java --- a/src/java.base/share/classes/java/nio/charset/Charset.java +++ b/src/java.base/share/classes/java/nio/charset/Charset.java @@ -635,10 +635,18 @@ * If the canonical name or any of the aliases are illegal */ protected Charset(String canonicalName, String[] aliases) { - checkName(canonicalName); String[] as = Objects.requireNonNullElse(aliases, zeroAliases); - for (int i = 0; i < as.length; i++) - checkName(as[i]); + + // Skip checks for the standard, built-in Charsets we always load + // during initialization. + if (!StandardCharsets.ISO_8859_1.equals(canonicalName) + && !StandardCharsets.US_ASCII.equals(canonicalName) + && !StandardCharsets.UTF_8.equals(canonicalName)) { + checkName(canonicalName); + for (int i = 0; i < as.length; i++) { + checkName(as[i]); + } + } this.name = canonicalName; this.aliases = as; } diff --git a/src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java b/src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java --- a/src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java +++ b/src/java.base/share/classes/sun/nio/cs/ISO_8859_1.java @@ -42,7 +42,7 @@ { public ISO_8859_1() { - super("ISO-8859-1", StandardCharsets.aliases_ISO_8859_1); + super(StandardCharsets.ISO_8859_1, StandardCharsets.aliases_ISO_8859_1); } public String historicalName() { diff --git a/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template b/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template --- a/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template +++ b/src/java.base/share/classes/sun/nio/cs/StandardCharsets.java.template @@ -51,6 +51,12 @@ private static final String packagePrefix = "sun.nio.cs"; + public static final String US_ASCII = "US-ASCII"; + + public static final String ISO_8859_1 = "ISO-8859-1"; + + public static final String UTF_8 = "UTF-8"; + public StandardCharsets() { this.aliasMap = new Aliases(); this.classMap = new Classes(); @@ -103,13 +109,13 @@ // As all charset class names added to classMap are string literals we // can check identity here as an optimization - if (cln == "US_ASCII") { + if (cln == US_ASCII) { return cache(csn, new US_ASCII()); } - if (cln == "ISO_8859_1") { + if (cln == ISO_8859_1) { return cache(csn, new ISO_8859_1()); } - if (cln == "UTF_8") { + if (cln == UTF_8) { return cache(csn, new UTF_8()); } diff --git a/src/java.base/share/classes/sun/nio/cs/US_ASCII.java b/src/java.base/share/classes/sun/nio/cs/US_ASCII.java --- a/src/java.base/share/classes/sun/nio/cs/US_ASCII.java +++ b/src/java.base/share/classes/sun/nio/cs/US_ASCII.java @@ -38,7 +38,7 @@ { public US_ASCII() { - super("US-ASCII", StandardCharsets.aliases_US_ASCII); + super(StandardCharsets.US_ASCII, StandardCharsets.aliases_US_ASCII); } public String historicalName() { diff --git a/src/java.base/share/classes/sun/nio/cs/UTF_8.java b/src/java.base/share/classes/sun/nio/cs/UTF_8.java --- a/src/java.base/share/classes/sun/nio/cs/UTF_8.java +++ b/src/java.base/share/classes/sun/nio/cs/UTF_8.java @@ -57,7 +57,7 @@ class UTF_8 extends Unicode { public UTF_8() { - super("UTF-8", StandardCharsets.aliases_UTF_8); + super(StandardCharsets.UTF_8, StandardCharsets.aliases_UTF_8); } public String historicalName() {