RFR: 8135108: java/util/zip/TestLocalTime.java fails intermittently with Invalid value for NanoOfSecond
Xueming Shen
xueming.shen at oracle.com
Mon Feb 15 22:45:48 UTC 2016
Hi,
Please help review the changes for JDK-8135108
issue: https://bugs.openjdk.java.net/browse/JDK-8135108
webrev: http://cr.openjdk.java.net/~sherman/8135108
It's a overflow of the low 32-bit of xdostime when the year is > 0x70
(which will be shifting << 25). We have a similar patch at
ZipUtils.javaToDosTime(). Obviously ZipEntry.setTimeLocale() needs
one as well.
/**
* Converts Java time to DOS time.
*/
private static long javaToDosTime(long time) {
Instant instant = Instant.ofEpochMilli(time);
LocalDateTime ldt = LocalDateTime.ofInstant(
instant, ZoneId.systemDefault());
int year = ldt.getYear() - 1980;
if (year < 0) {
return (1 << 21) | (1 << 16);
}
return (year << 25 |
ldt.getMonthValue() << 21 |
ldt.getDayOfMonth() << 16 |
ldt.getHour() << 11 |
ldt.getMinute() << 5 |
ldt.getSecond() >> 1) & 0xffffffffL;
}
Thanks!
Sherman
More information about the core-libs-dev
mailing list