src/share/classes/java/util/zip/ZipOutputStream.java

Print this page

        

*** 661,670 **** --- 661,673 ---- int len = extra.length; int off = 0; while (off + 4 <= len) { int tag = get16(extra, off); int sz = get16(extra, off + 2); + if (sz < 0 || (off + 4 + sz) > len) { + break; + } if (tag == EXTID_EXTT || tag == EXTID_ZIP64) { skipped += (sz + 4); } off += (sz + 4); }
*** 682,696 **** --- 685,706 ---- int len = extra.length; int off = 0; while (off + 4 <= len) { int tag = get16(extra, off); int sz = get16(extra, off + 2); + if (sz < 0 || (off + 4 + sz) > len) { + writeBytes(extra, off, len - off); + return; + } if (tag != EXTID_EXTT && tag != EXTID_ZIP64) { writeBytes(extra, off, sz + 4); } off += (sz + 4); } + if (off < len) { + writeBytes(extra, off, len - off); + } } } /* * Writes a 8-bit byte to the output stream.