JDK-8173072: zipfs fails to handle incorrect info-zip "extended timestamp extra field"

Xueming Shen xueming.shen at oracle.com
Fri Jan 20 09:03:49 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