RFR JDK-8130914: java/util/zip/TestExtraTime.java fails with "java.lang.RuntimeException: setTime should make getLastModifiedTime return the specified instant: 3078282244456 got: 3078282244455"
Xueming Shen
xueming.shen at oracle.com
Fri Jul 17 16:12:15 UTC 2015
On 7/17/15 8:45 AM, Xueming Shen wrote:
> On 7/17/15 1:04 AM, Peter Levart wrote:
>> Hi Sherman,
>>
>> On 07/15/2015 09:10 PM, Xueming Shen wrote:
>>> Hi,
>>>
>>> Please help review the change for JDK-8130914.
>>>
>>> issue: https://bugs.openjdk.java.net/browse/JDK-8130914
>>> webrev: http://cr.openjdk.java.net/~sherman/8130914/
>>>
>>> This is a "regression" triggered by
>>> https://bugs.openjdk.java.net/browse/JDK-8130914
>>> http://cr.openjdk.java.net/~redestad/jdk9/8073497/webrev.6/
>>
>> And-ing the result with a 32 bit mask (2^32 - 1) does make sure that
>> high 32 bits are not touched by year encoding. As I understand, this
>> starts to be a problem with year 2044 and beyond when (year - 1980)
>> << 25 becomes a negative number. Expanding it to long sets the high
>> 32 bits too. If we treat the lower 32 bits as unsigned, we
>> accommodate for years up to and including 2107. At 2108, the overflow
>> happens and decoding the year back gives 1980 instead of 2108. So I
>> wonder:
>> - will there be a DOS compatible ZIP format after 2108 ?
>> - will there be Java after 2108 ?
>
> Yes, dos timestamp has a 2107 ceiling, given it's 32-bit nature, like
> the unix time has a 2038 ceiling if
> the long stays as 32-bit.
>
>> - depending on the above answers, should there be a
>> DOSTIME_AFTER_2107 in addition to DOSTIME_BEFORE_1980 to which the
>> date is clamped?
>>
>
btw, we do have a ZipEntry.UPPER_DOSTIME_BOUND to help save a timestamp
into the extra field, if necessary.
-sherman
More information about the core-libs-dev
mailing list