# HG changeset patch # User redestad # Date 1445012496 -7200 # Fri Oct 16 18:21:36 2015 +0200 # Node ID 1c329d21055bf32633deec4891f861b3544d7251 # Parent 91fc3c3826e6b3cdc96c3232eb1a3e447236e443 8139706: JarFile.getBytes could use InputStream.readNBytes Reviewed-by: chegar, sherman, alanb diff --git a/src/java.base/share/classes/java/util/jar/JarFile.java b/src/java.base/share/classes/java/util/jar/JarFile.java --- a/src/java.base/share/classes/java/util/jar/JarFile.java +++ b/src/java.base/share/classes/java/util/jar/JarFile.java @@ -438,10 +438,20 @@ private byte[] getBytes(ZipEntry ze) throws IOException { try (InputStream is = super.getInputStream(ze)) { int len = (int)ze.getSize(); - byte[] b = is.readAllBytes(); - if (len != -1 && b.length != len) - throw new EOFException("Expected:" + len + ", read:" + b.length); - + byte[] b; + // trust specified entry sizes when reasonably small + if (len != -1 && len <= 65535) { + b = new byte[len]; + len = is.readNBytes(b, 0, len); + if (len != b.length) { + throw new EOFException("Expected:" + b.length + ", read:" + len); + } + } else { + b = is.readAllBytes(); + if (len > b.length) { + throw new EOFException("Expected:" + len + ", read:" + b.length); + } + } return b; } }