# HG changeset patch # User weijun # Date 1533686743 -28800 # Node ID 0da586f1ed05ac29968210bca71c55b34b6ca082 # Parent 2990f1e1c3259e5f624610d3fdcb699465cd0ae0 8208754: The fix for JDK-8194534 needs updates Reviewed-by: alanb, igerasim, rhalade, mullan diff -r 2990f1e1c325 -r 0da586f1ed05 src/java.base/share/classes/java/util/jar/JarFile.java --- a/src/java.base/share/classes/java/util/jar/JarFile.java Mon Jul 30 13:53:30 2018 -0400 +++ b/src/java.base/share/classes/java/util/jar/JarFile.java Wed Aug 08 08:05:43 2018 +0800 @@ -1025,7 +1025,7 @@ } } - private synchronized void ensureInitialization() { + synchronized void ensureInitialization() { try { maybeInstantiateVerifier(); } catch (IOException e) { diff -r 2990f1e1c325 -r 0da586f1ed05 src/java.base/share/classes/java/util/jar/JavaUtilJarAccessImpl.java --- a/src/java.base/share/classes/java/util/jar/JavaUtilJarAccessImpl.java Mon Jul 30 13:53:30 2018 -0400 +++ b/src/java.base/share/classes/java/util/jar/JavaUtilJarAccessImpl.java Wed Aug 08 08:05:43 2018 +0800 @@ -65,4 +65,7 @@ return man.getTrustedAttributes(name); } + public void ensureInitialization(JarFile jar) { + jar.ensureInitialization(); + } } diff -r 2990f1e1c325 -r 0da586f1ed05 src/java.base/share/classes/java/util/jar/Manifest.java --- a/src/java.base/share/classes/java/util/jar/Manifest.java Mon Jul 30 13:53:30 2018 -0400 +++ b/src/java.base/share/classes/java/util/jar/Manifest.java Wed Aug 08 08:05:43 2018 +0800 @@ -169,6 +169,10 @@ * does not exist in SF files of all signers). */ Attributes getTrustedAttributes(String name) { + // Note: Before the verification of MANIFEST.MF/.SF/.RSA files is done, + // jv.isTrustedManifestEntry() isn't able to detect MANIFEST.MF change. + // Users of this method should call SharedSecrets.javaUtilJarAccess() + // .ensureInitialization() first. Attributes result = getAttributes(name); if (result != null && jv != null && ! jv.isTrustedManifestEntry(name)) { throw new SecurityException("Untrusted manifest entry: " + name); diff -r 2990f1e1c325 -r 0da586f1ed05 src/java.base/share/classes/jdk/internal/loader/URLClassPath.java --- a/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java Mon Jul 30 13:53:30 2018 -0400 +++ b/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java Wed Aug 08 08:05:43 2018 +0800 @@ -866,8 +866,10 @@ { return jar.getInputStream(entry); } public int getContentLength() { return (int)entry.getSize(); } - public Manifest getManifest() throws IOException - { return jar.getManifest(); }; + public Manifest getManifest() throws IOException { + SharedSecrets.javaUtilJarAccess().ensureInitialization(jar); + return jar.getManifest(); + } public Certificate[] getCertificates() { return entry.getCertificates(); }; public CodeSigner[] getCodeSigners() diff -r 2990f1e1c325 -r 0da586f1ed05 src/java.base/share/classes/jdk/internal/misc/JavaUtilJarAccess.java --- a/src/java.base/share/classes/jdk/internal/misc/JavaUtilJarAccess.java Mon Jul 30 13:53:30 2018 -0400 +++ b/src/java.base/share/classes/jdk/internal/misc/JavaUtilJarAccess.java Wed Aug 08 08:05:43 2018 +0800 @@ -44,4 +44,5 @@ public void setEagerValidation(JarFile jar, boolean eager); public List getManifestDigests(JarFile jar); public Attributes getTrustedAttributes(Manifest man, String name); + public void ensureInitialization(JarFile jar); }