From 7e5577a6c1f41efc9c14ffc3e80775d319a8f279 Mon Sep 17 00:00:00 2001 From: John Jiang Date: Wed, 24 Jan 2018 23:01:57 -0800 Subject: [PATCH] 8186098: sun/security/pkcs11/KeyStore/SecretKeysBasic.sh failed due to libnss3 version cannot be parsed Improves the approach on parsing lib version Reviewed-by: weijun, xuelei --- test/jdk/sun/security/pkcs11/PKCS11Test.java | 26 +++++++++++--------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/test/jdk/sun/security/pkcs11/PKCS11Test.java b/test/jdk/sun/security/pkcs11/PKCS11Test.java index 58332023325..26b25506c31 100644 --- a/test/jdk/sun/security/pkcs11/PKCS11Test.java +++ b/test/jdk/sun/security/pkcs11/PKCS11Test.java @@ -31,6 +31,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; +import java.nio.charset.StandardCharsets; import java.security.AlgorithmParameters; import java.security.InvalidAlgorithmParameterException; import java.security.KeyPairGenerator; @@ -387,6 +388,11 @@ public abstract class PKCS11Test { getNSSInfo(nss_library); } + // Try to parse the version for the specified library. + // Assuming the library contains either of the following patterns: + // $Header: NSS + // Version: NSS + // Here, stands for NSS version. static double getNSSInfo(String library) { // look for two types of headers in NSS libraries String nssHeader1 = "$Header: NSS"; @@ -417,7 +423,7 @@ public abstract class PKCS11Test { read = 100 + is.read(data, 100, 900); } - s = new String(data, 0, read); + s = new String(data, 0, read, StandardCharsets.US_ASCII); i = s.indexOf(nssHeader1); if (i > 0 || (i = s.indexOf(nssHeader2)) > 0) { found = true; @@ -443,18 +449,13 @@ public abstract class PKCS11Test { // the index after whitespace after nssHeader int afterheader = s.indexOf("NSS", i) + 4; - int nextSpaceIndex = s.indexOf(' ', afterheader); - - // If the next space is not found, - // it has to print the content for further investigation. - if (nextSpaceIndex == -1) { - System.out.println("===== Content start ====="); - System.out.println(s); - System.out.println("===== Content end ====="); + String version = String.valueOf(s.charAt(afterheader)); + for (char c = s.charAt(++afterheader); + c == '.' || (c >= '0' && c <= '9'); + c = s.charAt(++afterheader)) { + version += c; } - String version = s.substring(afterheader, nextSpaceIndex); - // If a "dot dot" release, strip the extra dots for double parsing String[] dot = version.split("\\."); if (dot.length > 2) { @@ -468,6 +469,9 @@ public abstract class PKCS11Test { try { nss_version = Double.parseDouble(version); } catch (NumberFormatException e) { + System.out.println("===== Content start ====="); + System.out.println(s); + System.out.println("===== Content end ====="); System.out.println("Failed to parse lib" + library + " version. Set to 0.0"); e.printStackTrace();