diff --git a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java index 9d9a776a010..31ff8eaf329 100644 --- a/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java +++ b/jdk/src/java.base/share/classes/java/util/zip/ZipFile.java @@ -1251,7 +1251,7 @@ class ZipFile implements ZipConstants, Closeable { idx = getEntryNext(idx); } /* If not addSlash, or slash is already there, we are done */ - if (!addSlash || name[name.length - 1] == '/') { + if (!addSlash || name.length == 0 || name[name.length - 1] == '/') { return -1; } /* Add slash and try once more */ diff --git a/jdk/test/java/util/zip/ZipFile/TestZipFile.java b/jdk/test/java/util/zip/ZipFile/TestZipFile.java index 986877731db..515ed356c2b 100644 --- a/jdk/test/java/util/zip/ZipFile/TestZipFile.java +++ b/jdk/test/java/util/zip/ZipFile/TestZipFile.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8142508 + * @bug 8142508 8146431 * @summary Tests various ZipFile apis * @run main/manual TestZipFile */ @@ -216,6 +216,13 @@ public class TestZipFile { } static void doTest0(Zip zip, ZipFile zf) throws Throwable { + // (0) check zero-length entry name, no AIOOBE + try { + check(zf.getEntry("") == null);; + } catch (Throwable t) { + unexpected(t); + } + List list = new ArrayList(zip.entries.keySet()); // (1) check entry list, in expected order if (!check(Arrays.equals(