8186098: sun/security/pkcs11/KeyStore/SecretKeysBasic.sh failed due to libnss3 version cannot be parsed
Summary: Improves the approach on parsing lib version
Reviewed-by: weijun, xuelei
--- a/test/jdk/sun/security/pkcs11/PKCS11Test.java Thu Jan 25 14:12:43 2018 +0800
+++ b/test/jdk/sun/security/pkcs11/PKCS11Test.java Wed Jan 24 23:01:57 2018 -0800
@@ -31,6 +31,7 @@
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 @@
getNSSInfo(nss_library);
}
+ // Try to parse the version for the specified library.
+ // Assuming the library contains either of the following patterns:
+ // $Header: NSS <version>
+ // Version: NSS <version>
+ // Here, <version> 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 @@
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 @@
// 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 @@
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();