From da10efd829256c3df37799b0a0f8ff41c55b5ea8 Mon Sep 17 00:00:00 2001 From: Steve Drach Date: Thu, 3 Mar 2016 09:47:40 -0800 Subject: [PATCH] 8150679: closed/javax/crypto/CryptoPermission/CallerIdentification.sh fails after fix for JDK-8132734 Also fixes JDK-8150920 Reviewed-by: psandoz, redestad --- .../share/classes/java/util/jar/JarFile.java | 12 ++++++--- .../jar/MultiReleaseJarURLConnection.java | 27 ++++++++++++++----- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java index 2ea1a69657a..b3bbced134c 100644 --- a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java +++ b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java @@ -893,11 +893,15 @@ class JarFile extends ZipFile { } private JarEntry verifiableEntry(ZipEntry ze) { - if (!(ze instanceof JarFileEntry)) { - ze = getJarEntry(ze.getName()); + if (ze instanceof JarFileEntry) { + // assure the name and entry match for verification + return ((JarFileEntry)ze).reifiedEntry(); } - // assure the name and entry match for verification - return ze == null ? null : ((JarFileEntry)ze).reifiedEntry(); + ze = getJarEntry(ze.getName()); + if (ze instanceof JarFileEntry) { + return ((JarFileEntry)ze).reifiedEntry(); + } + return (JarEntry)ze; } // Statics for hand-coded Boyer-Moore search diff --git a/jdk/test/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java b/jdk/test/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java index a500eb2e25c..aeca6c6b50d 100644 --- a/jdk/test/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java +++ b/jdk/test/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java @@ -42,27 +42,40 @@ import java.util.jar.JarFile; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class MultiReleaseJarURLConnection { String userdir = System.getProperty("user.dir","."); - String urlFile = "jar:file:" + userdir + "/multi-release.jar!/"; - String urlEntry = urlFile + "version/Version.java"; + String file = userdir + "/signed-multi-release.jar"; @BeforeClass public void initialize() throws Exception { CreateMultiReleaseTestJars creator = new CreateMultiReleaseTestJars(); creator.compileEntries(); creator.buildMultiReleaseJar(); + creator.buildSignedMultiReleaseJar(); } @AfterClass public void close() throws IOException { Files.delete(Paths.get(userdir, "multi-release.jar")); + Files.delete(Paths.get(userdir, "signed-multi-release.jar")); } - @Test - public void testRuntimeVersioning() throws Exception { + @DataProvider(name = "data") + public Object[][] createData() { + return new Object[][]{ + {"unsigned file", userdir + "/multi-release.jar"}, + {"signed file", userdir + "/signed-multi-release.jar"}, + }; + } + + @Test(dataProvider = "data") + public void testRuntimeVersioning(String ignore, String file) throws Exception { + String urlFile = "jar:file:" + file + "!/"; + String urlEntry = urlFile + "version/Version.java"; + Assert.assertTrue(readAndCompare(new URL(urlEntry), "return 8")); // #runtime is "magic" Assert.assertTrue(readAndCompare(new URL(urlEntry + "#runtime"), "return 9")); @@ -72,8 +85,10 @@ public class MultiReleaseJarURLConnection { Assert.assertTrue(readAndCompare(new URL(urlEntry), "return 8")); } - @Test - public void testCachedJars() throws Exception { + @Test(dataProvider = "data") + public void testCachedJars(String ignore, String file) throws Exception { + String urlFile = "jar:file:" + file + "!/"; + URL rootUrl = new URL(urlFile); JarURLConnection juc = (JarURLConnection)rootUrl.openConnection(); JarFile rootJar = juc.getJarFile();