JDK-8173072: zipfs fails to handle incorrect info-zip "extended timestamp extra field"
Xueming Shen
xueming.shen at oracle.com
Fri Jan 20 09:02:12 UTC 2017
On 1/20/17, 12:28 AM, Xueming Shen wrote:
>
> -----------------------------
>
> The lower three bits of Flags in both headers indicate which
> time-
> stamps are present in the LOCAL extra field:
>
> bit 0 if set, modification time is present
> bit 1 if set, access time is present
> bit 2 if set, creation time is present
> bits 3-7 reserved for additional timestamps;
> not set
>
> ------------------------------
>
> It means we need to fix the ZipOutputStream to output the correct cen
> entry flags, if there
> are more extra timestamps. (jar does not create them)
>
False alarm, It has been years since I wrote this part of the code :-)
Just doubt checked the code,
it appears both ZipOutputStream and zipfs.Entry.writeCEN() are
implemented correctly to output
the correct flags that indicate the timestamps in loc only.
ZFS.Entry.writeCEN
if (elenEXTT != 0) {
writeShort(os, EXTID_EXTT);
writeShort(os, elenEXTT - 4);
if (ctime == -1)
os.write(0x3); // mtime and atime
else
os.write(0x7); // mtime, atime and ctime
writeInt(os, javaToUnixTime(mtime));
}
ZOS.writeCEN
{
writeShort(EXTID_EXTT);
if (e.mtime != null) {
writeShort(5); // flag + mtime
writeByte(flagEXTT);
writeInt(umtime);
} else {
writeShort(1); // flag only
writeByte(flagEXTT);
}
So the better fix for this one should simply not try to read a/ctime at all
in cen reading code.
-Sherman
More information about the nio-dev
mailing list