diff --git a/closed/openjdk-tag.gmk b/closed/openjdk-tag.gmk index b4835427112..15f65f8e5a2 100644 --- a/closed/openjdk-tag.gmk +++ b/closed/openjdk-tag.gmk @@ -1 +1 @@ -OPENJDK_TAG := jdk8u362-b07 +OPENJDK_TAG := jdk8u362-b09 diff --git a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/ORBConstants.java b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/ORBConstants.java index 68a901fd60e..a621d88aa43 100644 --- a/corba/src/share/classes/com/sun/corba/se/impl/orbutil/ORBConstants.java +++ b/corba/src/share/classes/com/sun/corba/se/impl/orbutil/ORBConstants.java @@ -317,6 +317,8 @@ public static int makePersistent( int scid ) public static final String DYNAMIC_STUB_FACTORY_FACTORY_CLASS = SUN_PREFIX + "ORBDynamicStubFactoryFactoryClass" ; + public static final String ALLOW_DESERIALIZE_OBJECT = SUN_PREFIX + "ORBAllowDeserializeObject" ; + // Constants for NameService properties ************************************ public static final int DEFAULT_INITIAL_PORT = 900; diff --git a/corba/src/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Stub.java b/corba/src/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Stub.java index c305ada5b24..89c809672e7 100644 --- a/corba/src/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Stub.java +++ b/corba/src/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Stub.java @@ -342,6 +342,11 @@ protected void writeSerializationMethods () stream.println (" private void readObject (java.io.ObjectInputStream s) throws java.io.IOException"); stream.println (" {"); stream.println (" String str = s.readUTF ();"); + if ("DynAnyFactory".equals (i.name ())) { + stream.println (" if (!str.startsWith(com.sun.corba.se.impl.orbutil.ORBConstants.STRINGIFY_PREFIX) &&"); + stream.println (" !Boolean.getBoolean(com.sun.corba.se.impl.orbutil.ORBConstants.ALLOW_DESERIALIZE_OBJECT))"); + stream.println (" throw new java.io.InvalidObjectException(\"IOR: expected\");"); + } stream.println (" String[] args = null;"); stream.println (" java.util.Properties props = null;"); stream.println (" org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init (args, props);"); diff --git a/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java b/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java index f9290b38601..11b21feeaa3 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/DHKeyPairGenerator.java @@ -34,6 +34,7 @@ import sun.security.provider.ParameterCache; import static sun.security.util.SecurityProviderConstants.DEF_DH_KEY_SIZE; +import static sun.security.util.SecurityProviderConstants.getDefDHPrivateExpSize; /** * This class represents the key pair generator for Diffie-Hellman key pairs. @@ -60,9 +61,6 @@ public final class DHKeyPairGenerator extends KeyPairGeneratorSpi { // The size in bits of the prime modulus private int pSize; - // The size in bits of the random exponent (private value) - private int lSize; - // The source of randomness private SecureRandom random; @@ -71,7 +69,8 @@ public DHKeyPairGenerator() { initialize(DEF_DH_KEY_SIZE, null); } - private static void checkKeySize(int keysize) + // pkg private; used by DHParameterGenerator class as well + static void checkKeySize(int keysize, int expSize) throws InvalidParameterException { if ((keysize < 512) || (keysize > 8192) || ((keysize & 0x3F) != 0)) { @@ -80,6 +79,13 @@ private static void checkKeySize(int keysize) "from 512 to 8192 (inclusive). " + "The specific key size " + keysize + " is not supported"); } + + // optional, could be 0 if not specified + if ((expSize < 0) || (expSize > keysize)) { + throw new InvalidParameterException + ("Exponent size must be positive and no larger than" + + " modulus size"); + } } /** @@ -91,22 +97,17 @@ private static void checkKeySize(int keysize) * @param random the source of randomness */ public void initialize(int keysize, SecureRandom random) { + checkKeySize(keysize, 0); - checkKeySize(keysize); - - // Use the built-in parameters (ranging from 512 to 8192) - // when available. - this.params = ParameterCache.getCachedDHParameterSpec(keysize); - - // Due to performance issue, only support DH parameters generation - // up to 1024 bits. - if ((this.params == null) && (keysize > 1024)) { - throw new InvalidParameterException( - "Unsupported " + keysize + "-bit DH parameter generation"); + try { + // Use the built-in parameters (ranging from 512 to 8192) + // when available. + this.params = ParameterCache.getDHParameterSpec(keysize, random); + } catch (GeneralSecurityException e) { + throw new InvalidParameterException(e.getMessage()); } this.pSize = keysize; - this.lSize = 0; this.random = random; } @@ -131,22 +132,13 @@ public void initialize(AlgorithmParameterSpec algParams, ("Inappropriate parameter type"); } - params = (DHParameterSpec)algParams; + params = (DHParameterSpec) algParams; pSize = params.getP().bitLength(); try { - checkKeySize(pSize); + checkKeySize(pSize, params.getL()); } catch (InvalidParameterException ipe) { throw new InvalidAlgorithmParameterException(ipe.getMessage()); } - - // exponent size is optional, could be 0 - lSize = params.getL(); - - // Require exponentSize < primeSize - if ((lSize != 0) && (lSize > pSize)) { - throw new InvalidAlgorithmParameterException - ("Exponent size must not be larger than modulus size"); - } this.random = random; } @@ -160,24 +152,12 @@ public KeyPair generateKeyPair() { random = SunJCE.getRandom(); } - if (params == null) { - try { - params = ParameterCache.getDHParameterSpec(pSize, random); - } catch (GeneralSecurityException e) { - // should never happen - throw new ProviderException(e); - } - } - BigInteger p = params.getP(); BigInteger g = params.getG(); - if (lSize <= 0) { - lSize = pSize >> 1; - // use an exponent size of (pSize / 2) but at least 384 bits - if (lSize < 384) { - lSize = 384; - } + int lSize = params.getL(); + if (lSize == 0) { // not specified; use our own default + lSize = getDefDHPrivateExpSize(params); } BigInteger x; diff --git a/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java b/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java index d921b6dc180..8ff8fa594ec 100644 --- a/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java +++ b/jdk/src/share/classes/com/sun/crypto/provider/DHParameterGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2022, 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 @@ -59,16 +59,20 @@ public final class DHParameterGenerator extends AlgorithmParameterGeneratorSpi { // The source of randomness private SecureRandom random = null; - private static void checkKeySize(int keysize) + private static void checkSupport(int keysize, int exponentSize) throws InvalidParameterException { boolean supported = ((keysize == 2048) || (keysize == 3072) || ((keysize >= 512) && (keysize <= 1024) && ((keysize & 0x3F) == 0))); if (!supported) { throw new InvalidParameterException( - "DH key size must be multiple of 64 and range " + + "Supported DH key size must be multiple of 64 and range " + "from 512 to 1024 (inclusive), or 2048, 3072. " + - "The specific key size " + keysize + " is not supported"); + "The specified key size " + keysize + " is not supported"); + } + + if (exponentSize != 0) { + DHKeyPairGenerator.checkKeySize(keysize, exponentSize); } } @@ -82,7 +86,8 @@ private static void checkKeySize(int keysize) */ @Override protected void engineInit(int keysize, SecureRandom random) { - checkKeySize(keysize); + checkSupport(keysize, 0); + this.primeSize = keysize; this.random = random; } @@ -107,21 +112,17 @@ protected void engineInit(AlgorithmParameterSpec genParamSpec, ("Inappropriate parameter type"); } - DHGenParameterSpec dhParamSpec = (DHGenParameterSpec)genParamSpec; - primeSize = dhParamSpec.getPrimeSize(); - exponentSize = dhParamSpec.getExponentSize(); - if ((exponentSize <= 0) || (exponentSize >= primeSize)) { - throw new InvalidAlgorithmParameterException( - "Exponent size (" + exponentSize + - ") must be positive and less than modulus size (" + - primeSize + ")"); - } + DHGenParameterSpec dhParamSpec = (DHGenParameterSpec) genParamSpec; + int primeSize = dhParamSpec.getPrimeSize(); + int exponentSize = dhParamSpec.getExponentSize(); try { - checkKeySize(primeSize); + checkSupport(primeSize, exponentSize); } catch (InvalidParameterException ipe) { throw new InvalidAlgorithmParameterException(ipe.getMessage()); } + this.primeSize = primeSize; + this.exponentSize = exponentSize; this.random = random; } diff --git a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java index 49a817d3dd9..fc7fcdbe30d 100644 --- a/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java +++ b/jdk/src/share/classes/com/sun/imageio/plugins/bmp/BMPImageReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2022, 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 @@ -554,25 +554,20 @@ else if (size == 124) iis.mark(); iis.skipBytes(profileData - size); - byte[] profile = new byte[profileSize]; - iis.readFully(profile, 0, profileSize); + byte[] profile = ReaderUtil. + staggeredReadByteStream(iis, profileSize); iis.reset(); - try { - if (metadata.colorSpace == PROFILE_LINKED && - isLinkedProfileAllowed() && - !isUncOrDevicePath(profile)) - { - String path = new String(profile, "windows-1252"); + if (metadata.colorSpace == PROFILE_LINKED && + isLinkedProfileAllowed()) + { + String path = new String(profile, "windows-1252"); - colorSpace = - new ICC_ColorSpace(ICC_Profile.getInstance(path)); - } else { - colorSpace = - new ICC_ColorSpace(ICC_Profile.getInstance(profile)); - } - } catch (Exception e) { - colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB); + colorSpace = + new ICC_ColorSpace(ICC_Profile.getInstance(path)); + } else if (metadata.colorSpace == PROFILE_EMBEDDED) { + colorSpace = + new ICC_ColorSpace(ICC_Profile.getInstance(profile)); } } @@ -1825,68 +1820,18 @@ public void sequenceStarted(ImageReader src, int minIndex) {} public void readAborted(ImageReader src) {} } - private static Boolean isLinkedProfileDisabled = null; + private static Boolean isLinkedProfileAllowed = null; private static boolean isLinkedProfileAllowed() { - if (isLinkedProfileDisabled == null) { + if (isLinkedProfileAllowed == null) { PrivilegedAction a = new PrivilegedAction() { public Boolean run() { - return Boolean.getBoolean("sun.imageio.plugins.bmp.disableLinkedProfiles"); + return Boolean. + getBoolean("sun.imageio.bmp.enableLinkedProfiles"); } }; - isLinkedProfileDisabled = AccessController.doPrivileged(a); - } - return !isLinkedProfileDisabled; - } - - private static Boolean isWindowsPlatform = null; - - /** - * Verifies whether the byte array contans a unc path. - * Non-UNC path examples: - * c:\path\to\file - simple notation - * \\?\c:\path\to\file - long notation - * - * UNC path examples: - * \\server\share - a UNC path in simple notation - * \\?\UNC\server\share - a UNC path in long notation - * \\.\some\device - a path to device. - */ - private static boolean isUncOrDevicePath(byte[] p) { - if (isWindowsPlatform == null) { - PrivilegedAction a = new PrivilegedAction() { - public Boolean run() { - String osname = System.getProperty("os.name"); - return (osname != null && - osname.toLowerCase().startsWith("win")); - } - }; - isWindowsPlatform = AccessController.doPrivileged(a); - } - - if (!isWindowsPlatform) { - /* no need for the check on platforms except windows */ - return false; - } - - /* normalize prefix of the path */ - if (p[0] == '/') p[0] = '\\'; - if (p[1] == '/') p[1] = '\\'; - if (p[3] == '/') p[3] = '\\'; - - - if ((p[0] == '\\') && (p[1] == '\\')) { - if ((p[2] == '?') && (p[3] == '\\')) { - // long path: whether unc or local - return ((p[4] == 'U' || p[4] == 'u') && - (p[5] == 'N' || p[5] == 'n') && - (p[6] == 'C' || p[6] == 'c')); - } else { - // device path or short unc notation - return true; - } - } else { - return false; + isLinkedProfileAllowed = AccessController.doPrivileged(a); } + return isLinkedProfileAllowed; } } diff --git a/jdk/src/share/classes/com/sun/media/sound/JARSoundbankReader.java b/jdk/src/share/classes/com/sun/media/sound/JARSoundbankReader.java index 32fc90ffbb7..a196ddcd76e 100644 --- a/jdk/src/share/classes/com/sun/media/sound/JARSoundbankReader.java +++ b/jdk/src/share/classes/com/sun/media/sound/JARSoundbankReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2022, 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,6 +32,7 @@ import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; +import java.util.Objects; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.Soundbank; import javax.sound.midi.spi.SoundbankReader; @@ -45,6 +46,13 @@ */ public final class JARSoundbankReader extends SoundbankReader { + /* + * Name of the system property that enables the Jar soundbank loading + * true if jar sound bank is allowed to be loaded + * default is false + */ + private final static String JAR_SOUNDBANK_ENABLED = "jdk.sound.jarsoundbank"; + private static boolean isZIP(URL url) { boolean ok = false; try { @@ -68,8 +76,10 @@ private static boolean isZIP(URL url) { public Soundbank getSoundbank(URL url) throws InvalidMidiDataException, IOException { - if (!isZIP(url)) + Objects.requireNonNull(url); + if (!Boolean.getBoolean(JAR_SOUNDBANK_ENABLED) || !isZIP(url)) return null; + ArrayList soundbanks = new ArrayList(); URLClassLoader ucl = URLClassLoader.newInstance(new URL[]{url}); InputStream stream = ucl.getResourceAsStream( @@ -117,6 +127,7 @@ public Soundbank getSoundbank(InputStream stream) public Soundbank getSoundbank(File file) throws InvalidMidiDataException, IOException { + Objects.requireNonNull(file); return getSoundbank(file.toURI().toURL()); } } diff --git a/jdk/src/share/classes/java/net/InetAddress.java b/jdk/src/share/classes/java/net/InetAddress.java index eebd8ef4b2b..e314647aae6 100644 --- a/jdk/src/share/classes/java/net/InetAddress.java +++ b/jdk/src/share/classes/java/net/InetAddress.java @@ -1119,6 +1119,10 @@ private static InetAddress[] getAllByName(String host, InetAddress reqAddr) InetAddress[] ret = new InetAddress[1]; if(addr != null) { if (addr.length == Inet4Address.INADDRSZ) { + if (numericZone != -1 || ifname != null) { + // IPv4-mapped address must not contain zone-id + throw new UnknownHostException(host + ": invalid IPv4-mapped address"); + } ret[0] = new Inet4Address(null, addr); } else { if (ifname != null) { @@ -1163,22 +1167,23 @@ private static int checkNumericZone (String s) throws UnknownHostException { int percent = s.indexOf ('%'); int slen = s.length(); int digit, zone=0; + int multmax = Integer.MAX_VALUE / 10; // for int overflow detection if (percent == -1) { return -1; } for (int i=percent+1; i multmax) { return -1; } zone = (zone * 10) + digit; + if (zone < 0) { + return -1; + } + } return zone; } diff --git a/jdk/src/share/classes/java/util/CurrencyData.properties b/jdk/src/share/classes/java/util/CurrencyData.properties index 961c24b0755..0fd0ed38871 100644 --- a/jdk/src/share/classes/java/util/CurrencyData.properties +++ b/jdk/src/share/classes/java/util/CurrencyData.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2000, 2022, 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 @@ -31,7 +31,7 @@ formatVersion=2 # Version of the currency code information in this class. # It is a serial number that accompanies with each amendment. -dataVersion=170 +dataVersion=174 # List of all valid ISO 4217 currency codes. # To ensure compatibility, do not remove codes. @@ -50,7 +50,7 @@ all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036 MTL470-MUR480-MVR462-MWK454-MXN484-MXV979-MYR458-MZM508-MZN943-NAD516-NGN566-\ NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\ PKR586-PLN985-PTE620-PYG600-QAR634-ROL642-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\ - SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\ + SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLE925-SLL694-SOS706-\ SRD968-SRG740-SSP728-STD678-STN930-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\ TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-UYI940-\ UYU858-UZS860-VEB862-VED926-VEF937-VES928-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\ @@ -188,7 +188,7 @@ CR=CRC # COTE D'IVOIRE CI=XOF # CROATIA -HR=HRK +HR=HRK;2022-12-31-23-00-00;EUR # CUBA CU=CUP # Cura\u00e7ao @@ -481,7 +481,7 @@ CS=CSD # SEYCHELLES SC=SCR # SIERRA LEONE -SL=SLL +SL=SLE # SINGAPORE SG=SGD # SLOVAKIA diff --git a/jdk/src/share/classes/javax/swing/text/html/ObjectView.java b/jdk/src/share/classes/javax/swing/text/html/ObjectView.java index e163d3e396a..5bcbc10c674 100644 --- a/jdk/src/share/classes/javax/swing/text/html/ObjectView.java +++ b/jdk/src/share/classes/javax/swing/text/html/ObjectView.java @@ -91,13 +91,15 @@ protected Component createComponent() { String classname = (String) attr.getAttribute(HTML.Attribute.CLASSID); try { ReflectUtil.checkPackageAccess(classname); - Class c = Class.forName(classname, true,Thread.currentThread(). + Class c = Class.forName(classname, false,Thread.currentThread(). getContextClassLoader()); - Object o = c.newInstance(); - if (o instanceof Component) { - Component comp = (Component) o; - setParameters(comp, attr); - return comp; + if (Component.class.isAssignableFrom(c)) { + Object o = c.newInstance(); + if (o instanceof Component) { + Component comp = (Component) o; + setParameters(comp, attr); + return comp; + } } } catch (Throwable e) { // couldn't create a component... fall through to the diff --git a/jdk/src/share/classes/sun/net/util/IPAddressUtil.java b/jdk/src/share/classes/sun/net/util/IPAddressUtil.java index 421cce93110..d7db5bcd926 100644 --- a/jdk/src/share/classes/sun/net/util/IPAddressUtil.java +++ b/jdk/src/share/classes/sun/net/util/IPAddressUtil.java @@ -706,7 +706,7 @@ private static boolean isHexFieldStart(CharBuffer cb) { } // Parse ASCII digit in given radix - private static int parseAsciiDigit(char c, int radix) { + public static int parseAsciiDigit(char c, int radix) { assert radix == OCTAL || radix == DECIMAL || radix == HEXADECIMAL; if (radix == HEXADECIMAL) { return parseAsciiHexDigit(c); diff --git a/jdk/src/share/classes/sun/security/provider/ParameterCache.java b/jdk/src/share/classes/sun/security/provider/ParameterCache.java index 0aad0d93d5e..f45c9f5a95f 100644 --- a/jdk/src/share/classes/sun/security/provider/ParameterCache.java +++ b/jdk/src/share/classes/sun/security/provider/ParameterCache.java @@ -34,6 +34,7 @@ import java.security.spec.*; import javax.crypto.spec.DHParameterSpec; +import sun.security.util.SafeDHParameterSpec; /** * Cache for DSA and DH parameter specs. Used by the KeyPairGenerators @@ -55,6 +56,26 @@ private ParameterCache() { // cache of DH parameters private final static Map dhCache; + // convert DHParameterSpec to SafeDHParameterSpec if its parameters are + // safe primes; validation takes time but should be worthwhile for the + // parameter cache since the parameters may be reused many times. + private static DHParameterSpec makeSafe(DHParameterSpec spec) { + if (spec instanceof SafeDHParameterSpec) { + return spec; + } + + BigInteger p = spec.getP(); + BigInteger g = spec.getG(); + + boolean isSafe = (g.equals(BigInteger.valueOf(2)) && p.testBit(0) && + p.shiftRight(1).isProbablePrime(100)); + if (isSafe) { + return new SafeDHParameterSpec(p, g, spec.getL()); + } else { + return spec; + } + } + /** * Return cached DSA parameters for the given length combination of * prime and subprime, or null if none are available in the cache. @@ -74,7 +95,7 @@ public static DSAParameterSpec getCachedDSAParameterSpec(int primeLen, * are available in the cache. */ public static DHParameterSpec getCachedDHParameterSpec(int keyLength) { - return dhCache.get(Integer.valueOf(keyLength)); + return dhCache.get(keyLength); } /** @@ -132,7 +153,7 @@ public static DHParameterSpec getDHParameterSpec(int keyLength, gen.init(keyLength, random); AlgorithmParameters params = gen.generateParameters(); spec = params.getParameterSpec(DHParameterSpec.class); - dhCache.put(Integer.valueOf(keyLength), spec); + dhCache.put(keyLength, makeSafe(spec)); return spec; } @@ -394,6 +415,12 @@ public static DSAParameterSpec getNewDSAParameterSpec(int primeLen, // the common generator BigInteger dhG = BigInteger.valueOf(2); + // Self generated following the approach from RFC 2412 Appendix E but + // using random source instead of binary expansion of pi + BigInteger dhP512 = new BigInteger( + "FFFFFFFFFFFFFFFF8B479B3A6E8DE86C294188F0BF2CD86C" + + "DB950ADB36D0F61FD51E46F69C99ED95ABE5A7BBB230A6ED" + + "1D0B4506B5317284FFFFFFFFFFFFFFFF", 16); // // From RFC 7296 @@ -562,16 +589,18 @@ public static DSAParameterSpec getNewDSAParameterSpec(int primeLen, "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71" + "60C980DD98EDD3DFFFFFFFFFFFFFFFFF", 16); - // use DSA parameters for DH for sizes not defined in RFC 7296, 3526 - dhCache.put(Integer.valueOf(512), new DHParameterSpec(p512, g512)); - - dhCache.put(Integer.valueOf(768), new DHParameterSpec(dhP768, dhG)); - dhCache.put(Integer.valueOf(1024), new DHParameterSpec(dhP1024, dhG)); - dhCache.put(Integer.valueOf(1536), new DHParameterSpec(dhP1536, dhG)); - dhCache.put(Integer.valueOf(2048), new DHParameterSpec(dhP2048, dhG)); - dhCache.put(Integer.valueOf(3072), new DHParameterSpec(dhP3072, dhG)); - dhCache.put(Integer.valueOf(4096), new DHParameterSpec(dhP4096, dhG)); - dhCache.put(Integer.valueOf(6144), new DHParameterSpec(dhP6144, dhG)); - dhCache.put(Integer.valueOf(8192), new DHParameterSpec(dhP8192, dhG)); + // self-generated safe prime + dhCache.put(512, new SafeDHParameterSpec(dhP512, dhG)); + + // from RFC 7296 + dhCache.put(768, new SafeDHParameterSpec(dhP768, dhG)); + dhCache.put(1024, new SafeDHParameterSpec(dhP1024, dhG)); + // from RFC 3526 + dhCache.put(1536, new SafeDHParameterSpec(dhP1536, dhG)); + dhCache.put(2048, new SafeDHParameterSpec(dhP2048, dhG)); + dhCache.put(3072, new SafeDHParameterSpec(dhP3072, dhG)); + dhCache.put(4096, new SafeDHParameterSpec(dhP4096, dhG)); + dhCache.put(6144, new SafeDHParameterSpec(dhP6144, dhG)); + dhCache.put(8192, new SafeDHParameterSpec(dhP8192, dhG)); } } diff --git a/jdk/src/share/classes/sun/security/ssl/PredefinedDHParameterSpecs.java b/jdk/src/share/classes/sun/security/ssl/PredefinedDHParameterSpecs.java index aa463ec2cd0..547955c075c 100644 --- a/jdk/src/share/classes/sun/security/ssl/PredefinedDHParameterSpecs.java +++ b/jdk/src/share/classes/sun/security/ssl/PredefinedDHParameterSpecs.java @@ -33,6 +33,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.crypto.spec.DHParameterSpec; +import sun.security.util.SafeDHParameterSpec; /** * Predefined default DH ephemeral parameters. @@ -279,8 +280,8 @@ public String run() { String baseGenerator = paramsFinder.group(2); BigInteger g = new BigInteger(baseGenerator, 16); - DHParameterSpec spec = new DHParameterSpec(p, g); int primeLen = p.bitLength(); + DHParameterSpec spec = new DHParameterSpec(p, g); defaultParams.put(primeLen, spec); } } else if (SSLLogger.isOn && SSLLogger.isOn("sslctx")) { @@ -293,7 +294,7 @@ public String run() { Map tempFFDHEs = new HashMap<>(); for (BigInteger p : ffdhePrimes) { int primeLen = p.bitLength(); - DHParameterSpec dhps = new DHParameterSpec(p, TWO); + DHParameterSpec dhps = new SafeDHParameterSpec(p, TWO); tempFFDHEs.put(primeLen, dhps); defaultParams.putIfAbsent(primeLen, dhps); } @@ -301,8 +302,7 @@ public String run() { for (BigInteger p : supportedPrimes) { int primeLen = p.bitLength(); if (defaultParams.get(primeLen) == null) { - defaultParams.put(primeLen, - new DHParameterSpec(p, TWO)); + defaultParams.put(primeLen, new SafeDHParameterSpec(p, TWO)); } } diff --git a/jdk/src/share/classes/sun/security/util/SafeDHParameterSpec.java b/jdk/src/share/classes/sun/security/util/SafeDHParameterSpec.java new file mode 100644 index 00000000000..6d95b9f498d --- /dev/null +++ b/jdk/src/share/classes/sun/security/util/SafeDHParameterSpec.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022, 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 + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.security.util; + +import java.math.BigInteger; +import javax.crypto.spec.DHParameterSpec; + +/** + * Internal marker class for well-known safe DH parameters. It should + * only be used with trusted callers since it does not have all the needed + * values for validation. + */ + +public final class SafeDHParameterSpec extends DHParameterSpec { + public SafeDHParameterSpec(BigInteger p, BigInteger g) { + super(p, g); + } + + public SafeDHParameterSpec(BigInteger p, BigInteger g, int l) { + super(p, g, l); + } +} diff --git a/jdk/src/share/classes/sun/security/util/SecurityProviderConstants.java b/jdk/src/share/classes/sun/security/util/SecurityProviderConstants.java index b9d0d26a21b..ef253722d71 100644 --- a/jdk/src/share/classes/sun/security/util/SecurityProviderConstants.java +++ b/jdk/src/share/classes/sun/security/util/SecurityProviderConstants.java @@ -27,6 +27,7 @@ import java.util.regex.PatternSyntaxException; import java.security.InvalidParameterException; +import javax.crypto.spec.DHParameterSpec; import sun.security.action.GetPropertyAction; /** @@ -54,6 +55,42 @@ public static final int getDefDSASubprimeSize(int primeSize) { } } + public static final int getDefDHPrivateExpSize(DHParameterSpec spec) { + + int dhGroupSize = spec.getP().bitLength(); + + if (spec instanceof SafeDHParameterSpec) { + // Known safe primes + // use 2*security strength as default private exponent size + // as in table 2 of NIST SP 800-57 part 1 rev 5, sec 5.6.1.1 + // and table 25 of NIST SP 800-56A rev 3, appendix D. + if (dhGroupSize >= 15360) { + return 512; + } else if (dhGroupSize >= 8192) { + return 400; + } else if (dhGroupSize >= 7680) { + return 384; + } else if (dhGroupSize >= 6144) { + return 352; + } else if (dhGroupSize >= 4096) { + return 304; + } else if (dhGroupSize >= 3072) { + return 256; + } else if (dhGroupSize >= 2048) { + return 224; + } else { + // min value for legacy key sizes + return 160; + } + } else { + // assume the worst and use groupSize/2 as private exp length + // up to 1024-bit and use the same minimum 384 as before + return Math.max((dhGroupSize >= 2048 ? 1024 : dhGroupSize >> 1), + 384); + } + + } + public static final int DEF_DSA_KEY_SIZE; public static final int DEF_RSA_KEY_SIZE; public static final int DEF_RSASSA_PSS_KEY_SIZE; diff --git a/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties b/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties index 9f1867d2cd1..53bf1d837ff 100644 --- a/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties +++ b/jdk/src/share/classes/sun/util/resources/CurrencyNames.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2022, 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 @@ -221,6 +221,7 @@ SGD=SGD SHP=SHP SIT=SIT SKK=SKK +SLE=SLE SLL=SLL SOS=SOS SRD=SRD @@ -445,6 +446,7 @@ sgd=Singapore Dollar shp=Saint Helena Pound sit=Slovenian Tolar skk=Slovak Koruna +sle=Sierra Leonean Leone sll=Sierra Leonean Leone sos=Somali Shilling srd=Surinamese Dollar diff --git a/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties b/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties index 70f210e2da6..56e61953a8c 100644 --- a/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties +++ b/jdk/src/share/classes/sun/util/resources/hr/CurrencyNames_hr_HR.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2023, 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,4 +35,5 @@ # This notice and attribution to Taligent may not be removed. # Taligent is a registered trademark of Taligent, Inc. +EUR=\u20AC HRK=Kn diff --git a/jdk/src/windows/native/sun/font/fontpath.c b/jdk/src/windows/native/sun/font/fontpath.c index 21bf30b08da..e30ab2bf9fb 100644 --- a/jdk/src/windows/native/sun/font/fontpath.c +++ b/jdk/src/windows/native/sun/font/fontpath.c @@ -24,6 +24,7 @@ */ #include +#include #include #include @@ -49,20 +50,20 @@ JNIEXPORT jstring JNICALL Java_sun_awt_Win32FontManager_getFontPath(JNIEnv *env, end = strrchr(sysdir,'\\'); if (end && (stricmp(end,"\\System") || stricmp(end,"\\System32"))) { *end = 0; - strcat(sysdir, "\\Fonts"); + StringCchCatA(sysdir, BSIZE, "\\Fonts"); } GetWindowsDirectory(windir, BSIZE); if (strlen(windir) > BSIZE-7) { *windir = 0; } else { - strcat(windir, "\\Fonts"); + StringCchCatA(windir, BSIZE, "\\Fonts"); } - strcpy(fontpath,sysdir); + StringCchCopyA(fontpath, BSIZE*2, sysdir); if (stricmp(sysdir,windir)) { - strcat(fontpath,";"); - strcat(fontpath,windir); + StringCchCatA(fontpath, BSIZE*2, ";"); + StringCchCatA(fontpath, BSIZE*2, windir); } return JNU_NewStringPlatform(env, fontpath); @@ -210,7 +211,7 @@ static int DifferentFamily(wchar_t *family, wchar_t* fullName) { info.isDifferent = 0; memset(&lfw, 0, sizeof(lfw)); - wcscpy(lfw.lfFaceName, fullName); + StringCchCopyW(lfw.lfFaceName, LF_FACESIZE, fullName); lfw.lfCharSet = DEFAULT_CHARSET; EnumFontFamiliesExW(screenDC, &lfw, (FONTENUMPROCW)CheckFontFamilyProcW, @@ -379,7 +380,7 @@ static int CALLBACK EnumFamilyNamesW( fmi->putMID, familyLC, fmi->list); memset(&lfw, 0, sizeof(lfw)); - wcscpy(lfw.lfFaceName, lpelfe->elfLogFont.lfFaceName); + StringCchCopyW(lfw.lfFaceName, LF_FACESIZE, lpelfe->elfLogFont.lfFaceName); lfw.lfCharSet = lpelfe->elfLogFont.lfCharSet; EnumFontFamiliesExW(screenDC, &lfw, (FONTENUMPROCW)EnumFontFacesInFamilyProcW, @@ -674,7 +675,7 @@ Java_sun_awt_Win32FontManager_populateFontFileNameMap0 LOGFONTW lfw; memset(&lfw, 0, sizeof(lfw)); lfw.lfCharSet = DEFAULT_CHARSET; /* all charsets */ - wcscpy(lfw.lfFaceName, L""); /* one face per family (CHECK) */ + StringCchCopyW(lfw.lfFaceName, LF_FACESIZE, L""); /* one face per family (CHECK) */ EnumFontFamiliesExW(screenDC, &lfw, (FONTENUMPROCW)EnumFamilyNamesW, (LPARAM)(&fmi), 0L); diff --git a/jdk/src/windows/native/sun/font/lcdglyph.c b/jdk/src/windows/native/sun/font/lcdglyph.c index c63d96c301c..d29504baa06 100644 --- a/jdk/src/windows/native/sun/font/lcdglyph.c +++ b/jdk/src/windows/native/sun/font/lcdglyph.c @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -245,7 +246,7 @@ Java_sun_font_FileFontStrike__1getGlyphImageFromWindows name[nameLen] = '\0'; if (nameLen < (sizeof(lf.lfFaceName) / sizeof(lf.lfFaceName[0]))) { - wcscpy(lf.lfFaceName, name); + StringCchCopyW(lf.lfFaceName, LF_FACESIZE, name); } else { FREE_AND_RETURN; } diff --git a/jdk/src/windows/native/sun/windows/awt_Font.cpp b/jdk/src/windows/native/sun/windows/awt_Font.cpp index 56a0e8cd871..3c02e34ec76 100644 --- a/jdk/src/windows/native/sun/windows/awt_Font.cpp +++ b/jdk/src/windows/native/sun/windows/awt_Font.cpp @@ -25,6 +25,7 @@ #include "awt.h" #include +#include #include "jlong.h" #include "awt_Font.h" #include "awt_Toolkit.h" @@ -286,7 +287,6 @@ AwtFont* AwtFont::Create(JNIEnv *env, jobject font, jint angle, jfloat awScale) return NULL; } LPCWSTR textComponentFontName = JNU_GetStringPlatformChars(env, jTextComponentFontName, NULL); - awtFont->m_textInput = -1; for (int i = 0; i < cfnum; i++) { // nativeName is a pair of platform fontname and its charset @@ -430,7 +430,7 @@ static HFONT CreateHFont_sub(LPCWSTR name, int style, int height, // Set font name WCHAR tmpname[80]; - wcscpy(tmpname, name); + StringCchCopy(tmpname, 80, name); WCHAR* delimit = wcschr(tmpname, L','); if (delimit != NULL) *delimit = L'\0'; // terminate the string after the font name. @@ -438,7 +438,7 @@ static HFONT CreateHFont_sub(LPCWSTR name, int style, int height, strip_tail(tmpname,L""); //strip possible trailing whitespace strip_tail(tmpname,L"Italic"); strip_tail(tmpname,L"Bold"); - wcscpy(&(logFont.lfFaceName[0]), tmpname); + StringCchCopy(&(logFont.lfFaceName[0]), LF_FACESIZE, tmpname); HFONT hFont = ::CreateFontIndirect(&logFont); DASSERT(hFont != NULL); // get a expanded or condensed version if its specified. @@ -469,7 +469,7 @@ HFONT AwtFont::CreateHFont(WCHAR* name, int style, int height, // 80 > (max face name(=30) + strlen("CHINESEBIG5_CHARSET")) // longName doesn't have to be printable. So, it is OK not to convert. - wsprintf(longName, L"%ls-%d-%d", name, style, height); + StringCchPrintf(longName, 80, L"%ls-%d-%d", name, style, height); HFONT hFont = NULL; @@ -1715,12 +1715,12 @@ LPSTR CCombinedSegTable::GetCodePageSubkey() lpszCP++; // cf lpszCP = "932" char szSubKey[KEYLEN]; - strcpy(szSubKey, "EUDC\\"); + StringCchCopyA(szSubKey, KEYLEN, "EUDC\\"); if ((strlen(szSubKey) + strlen(lpszCP)) >= KEYLEN) { return NULL; } - strcpy(&(szSubKey[strlen(szSubKey)]), lpszCP); - strcpy(m_szCodePageSubkey, szSubKey); + StringCchCatA(szSubKey, KEYLEN, lpszCP); + StringCchCopyA(m_szCodePageSubkey, KEYLEN, szSubKey); return m_szCodePageSubkey; } @@ -1745,7 +1745,7 @@ void CCombinedSegTable::GetEUDCFileName(LPWSTR lpszFileName, int cchFileName) // get EUDC font file name WCHAR szFamilyName[80]; - wcscpy(szFamilyName, GetFontName()); + StringCchCopy(szFamilyName, 80, GetFontName()); WCHAR* delimit = wcschr(szFamilyName, L','); if (delimit != NULL) *delimit = L'\0'; @@ -1764,7 +1764,7 @@ void CCombinedSegTable::GetEUDCFileName(LPWSTR lpszFileName, int cchFileName) if (m_fTTEUDCFileExist == FALSE) return; if (wcslen(m_szDefaultEUDCFile) > 0) { - wcscpy(lpszFileName, m_szDefaultEUDCFile); + StringCchCopy(lpszFileName, cchFileName, m_szDefaultEUDCFile); return; } char szDefault[] = "SystemDefaultEUDCFont"; @@ -1790,7 +1790,7 @@ void CCombinedSegTable::GetEUDCFileName(LPWSTR lpszFileName, int cchFileName) VERIFY(::MultiByteToWideChar(CP_ACP, 0, (LPCSTR)szFileName, -1, lpszFileName, cchFileName) != 0); if (fUseDefault) - wcscpy(m_szDefaultEUDCFile, lpszFileName); + StringCchCopy(m_szDefaultEUDCFile, _MAX_PATH, lpszFileName); } void CCombinedSegTable::Create(LPCWSTR name) diff --git a/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp b/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp index 7632f077317..92f7fe9b5c8 100644 --- a/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp +++ b/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp @@ -24,6 +24,7 @@ */ #include "awt.h" +#include #include #include #include @@ -2293,7 +2294,7 @@ static jboolean jFontToWFontW(JNIEnv *env, HDC printDC, jstring fontName, size_t nameLen = wcslen(fontNameW); if (nameLen < (sizeof(lf.lfFaceName) / sizeof(lf.lfFaceName[0]))) { - wcscpy(lf.lfFaceName, fontNameW); + StringCchCopyW(lf.lfFaceName, LF_FACESIZE, fontNameW); lf.lfCharSet = DEFAULT_CHARSET; lf.lfPitchAndFamily = 0; diff --git a/jdk/test/java/text/Format/NumberFormat/CurrencySymbols.properties b/jdk/test/java/text/Format/NumberFormat/CurrencySymbols.properties index cf73a9c7e31..665dd3b290a 100644 --- a/jdk/test/java/text/Format/NumberFormat/CurrencySymbols.properties +++ b/jdk/test/java/text/Format/NumberFormat/CurrencySymbols.properties @@ -79,7 +79,7 @@ fr_FR=\u20AC fr_LU=\u20AC hi_IN=\u0930\u0942 hr=\u00A4 -hr_HR=Kn +hr_HR=\u20AC hu=\u00A4 hu_HU=Ft is=\u00A4 @@ -94,9 +94,9 @@ ja_JP=\uFFE5 ko=\u00A4 ko_KR=\uFFE6 lt=\u00A4 -lt_LT=Lt;2014-12-31-22-00-00;\u20AC +lt_LT=\u20AC lv=\u00A4 -lv_LV=Ls;2013-12-31-22-00-00;\u20AC +lv_LV=\u20AC mk=\u00A4 mk_MK=Den nl=\u00A4 diff --git a/jdk/test/java/util/Currency/ValidateISO4217.java b/jdk/test/java/util/Currency/ValidateISO4217.java index 6533703e6c2..7f81818330a 100644 --- a/jdk/test/java/util/Currency/ValidateISO4217.java +++ b/jdk/test/java/util/Currency/ValidateISO4217.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2022, 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 @@ -24,7 +24,7 @@ * @test * @bug 4691089 4819436 4942982 5104960 6544471 6627549 7066203 7195759 * 8074350 8074351 8145952 8187946 8193552 8202026 8204269 - * 8208746 8209775 8274658 + * 8208746 8209775 8274658 8283277 8296239 * @summary Validate ISO 4217 data for Currency class. */ @@ -32,7 +32,7 @@ * ############################################################################ * * ValidateISO4217 is a tool to detect differences between the latest ISO 4217 - * data and and Java's currency data which is based on ISO 4217. + * data and Java's currency data which is based on ISO 4217. * If there is a difference, the following file which includes currency data * may need to be updated. * src/share/classes/java/util/CurrencyData.properties @@ -96,7 +96,7 @@ public class ValidateISO4217 { static final String otherCodes = "ADP-AFA-ATS-AYM-AZM-BEF-BGL-BOV-BYB-BYR-CHE-CHW-CLF-COU-CUC-CYP-" + "DEM-EEK-ESP-FIM-FRF-GHC-GRD-GWP-IEP-ITL-LTL-LUF-LVL-MGF-MRO-MTL-MXV-MZM-NLG-" - + "PTE-ROL-RUR-SDD-SIT-SKK-SRG-STD-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-VED-" + + "PTE-ROL-RUR-SDD-SIT-SLL-SKK-SRG-STD-TMM-TPE-TRL-VEF-UYI-USN-USS-VEB-VED-" + "XAG-XAU-XBA-XBB-XBC-XBD-XDR-XFO-XFU-XPD-XPT-XSU-XTS-XUA-XXX-" + "YUM-ZMK-ZWD-ZWN-ZWR"; diff --git a/jdk/test/java/util/Currency/tablea1.txt b/jdk/test/java/util/Currency/tablea1.txt index 905a07a39c7..e06933d0c03 100644 --- a/jdk/test/java/util/Currency/tablea1.txt +++ b/jdk/test/java/util/Currency/tablea1.txt @@ -1,12 +1,12 @@ # # -# Amendments up until ISO 4217 AMENDMENT NUMBER 170 -# (As of 1 Oct 2021) +# Amendments up until ISO 4217 AMENDMENT NUMBER 174 +# (As of 2 November 2022) # # Version FILEVERSION=2 -DATAVERSION=170 +DATAVERSION=174 # ISO 4217 currency data AF AFN 971 2 @@ -67,7 +67,7 @@ CD CDF 976 2 CK NZD 554 2 CR CRC 188 2 CI XOF 952 0 -HR HRK 191 2 +HR HRK 191 2 2022-12-31-23-00-00 EUR 978 2 CU CUP 192 2 CW ANG 532 2 CY EUR 978 2 @@ -218,7 +218,7 @@ RS RSD 941 2 CS CSD 891 2 #CS EUR 978 2 SC SCR 690 2 -SL SLL 694 2 +SL SLE 925 2 SG SGD 702 2 SK EUR 978 2 # MA 131 diff --git a/jdk/test/sun/text/resources/LocaleData b/jdk/test/sun/text/resources/LocaleData index 8aeb00d6b97..574a031f236 100644 --- a/jdk/test/sun/text/resources/LocaleData +++ b/jdk/test/sun/text/resources/LocaleData @@ -6451,6 +6451,7 @@ CurrencyNames//rsd=Serbian Dinar CurrencyNames//scr=Seychellois Rupee CurrencyNames//sdd=Sudanese Dinar (1992-2007) CurrencyNames//sit=Slovenian Tolar +CurrencyNames//sle=Sierra Leonean Leone CurrencyNames//sll=Sierra Leonean Leone CurrencyNames//srd=Surinamese Dollar CurrencyNames//srg=Surinamese Guilder diff --git a/jdk/test/sun/text/resources/LocaleDataTest.java b/jdk/test/sun/text/resources/LocaleDataTest.java index d9586489e7f..941dd6824d9 100644 --- a/jdk/test/sun/text/resources/LocaleDataTest.java +++ b/jdk/test/sun/text/resources/LocaleDataTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2022, 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 @@ -38,7 +38,7 @@ * 7114053 7074882 7040556 8013836 8021121 6192407 6931564 8027695 7090826 * 8017142 8037343 8055222 8042126 8074791 8075173 8080774 8129361 8145952 * 8164784 8187946 8195478 8193552 8202026 8204269 8208746 8209775 8234228 - * 8250665 8255086 8274658 + * 8250665 8255086 8274658 8283277 * @summary Verify locale data * */