8211728: JarFile::versionedStream() does not filter META-INF resources in versioned stream
authorsherman
Mon, 08 Oct 2018 14:14:52 -0700
changeset 52046 2a85adf3c330
parent 52045 0e6e0d584b47
child 52047 7bc8b456e5ac
child 56942 cf8d1b2388b8
8211728: JarFile::versionedStream() does not filter META-INF resources in versioned stream Reviewed-by: alanb
src/java.base/share/classes/java/util/jar/JarFile.java
test/jdk/java/util/jar/JarFile/mrjar/TestVersionedStream.java
--- a/src/java.base/share/classes/java/util/jar/JarFile.java	Mon Oct 08 13:56:28 2018 -0700
+++ b/src/java.base/share/classes/java/util/jar/JarFile.java	Mon Oct 08 14:14:52 2018 -0700
@@ -556,7 +556,8 @@
             return JUZFA.entryNameStream(this).map(this::getBasename)
                                               .filter(Objects::nonNull)
                                               .distinct()
-                                              .map(this::getJarEntry);
+                                              .map(this::getJarEntry)
+                                              .filter(Objects::nonNull);
         }
         return stream();
     }
--- a/test/jdk/java/util/jar/JarFile/mrjar/TestVersionedStream.java	Mon Oct 08 13:56:28 2018 -0700
+++ b/test/jdk/java/util/jar/JarFile/mrjar/TestVersionedStream.java	Mon Oct 08 14:14:52 2018 -0700
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8163798 8189611
+ * @bug 8163798 8189611 8211728
  * @summary basic tests for multi-release jar versioned streams
  * @library /test/lib
  * @modules jdk.jartool/sun.tools.jar java.base/jdk.internal.util.jar
@@ -82,7 +82,8 @@
                 "v10/p/Foo.class",
                 "v10/q/Bar.class",
                 "v" + LATEST_VERSION + "/p/Bar.class",
-                "v" + LATEST_VERSION + "/p/Foo.class"
+                "v" + LATEST_VERSION + "/p/Foo.class",
+                "v" + LATEST_VERSION + "/META-INF/Foo.class"
         );
 
         jar("cf mmr.jar -C base . " +
@@ -224,6 +225,11 @@
                     throw new UncheckedIOException(x);
                 }
             });
+
+            if (!unversionedEntryNames.contains("META-INF/Foo.class") ||
+                versionedNames.indexOf("META-INF/Foo.class") != -1) {
+                Assert.fail("versioned META-INF/Foo.class test failed");
+            }
         }
     }