This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Bug (old?) in ZipEntry?


I think I have found the problem. The "fromzip.zip" archive
contains an additional timestamp entry for "ZipDates.java":

Current Location part 1 offset 43
  extra field 0x5455 (universal time), 4 header and 9 data bytes:
  03 90 5d 21 43 f6 5d 21 43                      ..]!C.]!C
  extra field 0x7855 (Unix UID/GID), 4 header and 4 data bytes:
  20 02 11 29                                      ..)

The modification timestamp is "1126260112" which is *seconds*
since *the standard UNIX epoch* (i.e., it is *not* a dostime).

[...]


Our ZipEntry code (both in libgcj/classpath) treats it as a
dostime, leading to the error that you have noticed.

This part is wrong - I misread the code.


Please file a bug report against classpath, including a link to
this message, if possible.

Hereby done!

If I patch GCJ's java/util/zip/ZipEntry.java as shown later, I get:


  ~/tmp/men > mygij ZipDates fromzip.zip
  ZipDates.java   date: 1126260112000     Fri Sep 09 15:31:52 GMT+05:30 2005

  ~/tmp/men > java ZipDates fromzip.zip
  ZipDates.java   date: 1126247512000     Fri Sep 09 12:01:52 IST 2005

Note that GCJ still seems off by 3.5 hours.

> However, according to the
docs, the given timestamp is seconds from epoch *UTC*, which *does*
translate to the time shown by GCJ. To confuse things further, the ZIP's
"normal" entry for "ZipDates.java" (not the 0x5455 extension entry
shown earlier) says it is the time reported by the JDK. (What is your
timezone? Is it GMT+02:00?)
Yes! So the 3.5h offset is the difference between you and me.
I created the file 12:01:52 GMT+02:00 (so it's really 10:01 UTC), the time JDK reports for you, however, in your timezone (so it thinks it has time 06:31 UTC - JDK error).
So, actually GCJ/Classpath does it correctly, since 15:31:52 GMT+05:30 is 10:31 UTC - the actual time of the file.


(Messy written - I know)

So either the JDK is showing only the "normal" entry without taking
the extension entry into account or the reference document that I
cited earlier has it wrong (unlikely). Either ways, your original
archiver program (the one that created the "fromzip.zip" archive)
is lying about the modification time in one of the entries.
Yes, I think my archiver puts the time in plus the timezone offset...

The patch I was talking of was:
I'm doing a new libgcj as we speak - looking forward to try it!

Thanks Ranjit!

// Martin

- ------------------------------- 8< -------------------------------
Index: java/util/zip/ZipEntry.java
===================================================================
- --- java/util/zip/ZipEntry.java 2005-09-13 13:40:41.000000000 +0530
+++ java/util/zip/ZipEntry.java 2005-09-13 15:43:40.000000000 +0530
@@ -168,5 +168,5 @@ public class ZipEntry implements ZipCons
     synchronized (cal)
       {
- -       cal.setTime(new Date(time));
+       cal.setTimeInMillis(time);
        dostime = (cal.get(Calendar.YEAR) - 1980 & 0x7f) << 25
          | (cal.get(Calendar.MONTH) + 1) << 21
@@ -337,5 +337,5 @@ public class ZipEntry implements ZipCons
                            | (extra[pos+3] & 0xff) << 16
                            | (extra[pos+4] & 0xff) << 24);
- -                   setTime(time);
+                   setTime(time*1000);
                  }
              }
- ------------------------------- 8< -------------------------------

Ranjit.

- --
Ranjit Mathew      Email: rmathew AT gmail DOT com

Bangalore, INDIA. Web: http://ranjitmathew.hostingzero.com/


-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (MingW32) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFDJq8rYb1hx2wRS48RAsgEAJwOuoDs1RVvhj/GO7DRY6LixsPHaACeN+GW
E2iucXRl4mRLmTiHAA9c+zg=
=LpSq
-----END PGP SIGNATURE-----



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]