< prev index next >
src/java.base/share/classes/java/util/jar/JarFile.java
Print this page
rev 12879 : 8139706: JarFile.getBytes could use InputStream.readNBytes
Reviewed-by: chegar, sherman, alanb
*** 436,449 ****
* META-INF files.
*/
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);
!
return b;
}
}
/**
--- 436,459 ----
* META-INF files.
*/
private byte[] getBytes(ZipEntry ze) throws IOException {
try (InputStream is = super.getInputStream(ze)) {
int len = (int)ze.getSize();
! 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;
}
}
/**
< prev index next >