From e3d1fffbe40007efb121b40f6ea3a052f4600d3d Mon Sep 17 00:00:00 2001 From: Claes Redestad Date: Sun, 18 Oct 2015 01:43:06 +0200 Subject: [PATCH] 8139706: JarFile.getBytes could use InputStream.readNBytes Reviewed-by: sherman, chegar, alanb --- .../share/classes/java/util/jar/JarFile.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 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 1dfa373396a..6d16a517ac9 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 @@ -438,10 +438,19 @@ class JarFile extends ZipFile { 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); - + int bytesRead; + byte[] b; + // trust specified entry sizes when reasonably small + if (len != -1 && len <= 65535) { + b = new byte[len]; + bytesRead = is.readNBytes(b, 0, len); + } else { + b = is.readAllBytes(); + bytesRead = b.length; + } + if (len != -1 && len != bytesRead) { + throw new EOFException("Expected:" + len + ", read:" + bytesRead); + } return b; } }