< 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,14 +436,24 @@
      * 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)
+            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 >