On Thu, 2 Dec 2021 00:09:15 GMT, John Neffenger <jgn...@openjdk.org> wrote:

>> Andrew Leonard has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>   Update src/jdk.jlink/share/classes/jdk/tools/jmod/JmodOutputStream.java
>>   
>>   Co-authored-by: Magnus Ihse Bursie <m...@icus.se>
>
> src/jdk.jartool/share/classes/sun/tools/jar/GNUStyleOptions.java line 199:
> 
>> 197:                 void process(Main jartool, String opt, String arg) 
>> throws BadArgs {
>> 198:                     try {
>> 199:                         jartool.date = ZonedDateTime.parse(arg, 
>> DateTimeFormatter.ISO_DATE_TIME)
> 
> The `ISO_ZONED_DATE_TIME` parser works better here.

done

> src/jdk.jartool/share/classes/sun/tools/jar/GNUStyleOptions.java line 201:
> 
>> 199:                         jartool.date = ZonedDateTime.parse(arg, 
>> DateTimeFormatter.ISO_DATE_TIME)
>> 200:                                            
>> .withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
>> 201:                         if (jartool.date.getYear() < 1980 || 
>> jartool.date.getYear() > 2099) {
> 
> This `if` test can end up with consequences down to the millisecond of the 
> instant provided, if present. (Try `1980-01-01T00:00:00.001Z` vs. 
> `1980-01-01T00:00:00Z` and check for extended headers.) How about something 
> like the following?
> 
> 
>     ... ZonedDateTime TIME_MIN = ZonedDateTime.parse("1980-01-01T00:00:02Z");
>     ... ZonedDateTime TIME_MAX = ZonedDateTime.parse("2099-12-31T23:59:59Z");
>     ...
>         var zoned = ZonedDateTime.parse(date, 
> DateTimeFormatter.ISO_ZONED_DATE_TIME);
>         if (zoned.isBefore(TIME_MIN) || zoned.isAfter(TIME_MAX)) {
>             ....

done

> src/jdk.jartool/share/classes/sun/tools/jar/resources/jar.properties line 88:
> 
>> 86:         date {0} is not a valid ISO 8601 date and time
>> 87: error.date.out.of.range=\
>> 88:         date {0} is not within the valid year range 1980->2099 
> 
> Maybe just define `date {0} is not within the valid range` and put the exact 
> interval in the *man* pages and documentation?

done

> src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java line 1164:
> 
>> 1162:         public LocalDateTime convert(String value) {
>> 1163:             try {
>> 1164:                 LocalDateTime date = ZonedDateTime.parse(value, 
>> DateTimeFormatter.ISO_DATE_TIME)
> 
> The `ISO_ZONED_DATE_TIME` parser works better here.

done

> src/jdk.jlink/share/classes/jdk/tools/jmod/JmodTask.java line 1166:
> 
>> 1164:                 LocalDateTime date = ZonedDateTime.parse(value, 
>> DateTimeFormatter.ISO_DATE_TIME)
>> 1165:                                          
>> .withZoneSameInstant(ZoneOffset.UTC).toLocalDateTime();
>> 1166:                 if (date.getYear() < 1980 || date.getYear() > 2099) {
> 
> See previous comment for this line in the `jar` tool.

done

> src/jdk.jlink/share/classes/jdk/tools/jmod/resources/jmod.properties line 111:
> 
>> 109: err.no.moduleToHash=No hashes recorded: no module matching {0} found to 
>> record hashes
>> 110: err.invalid.date=--date {0} is not a valid ISO 8601 date and time: {1} 
>> 111: err.date.out.of.range=--date {0} is out of the valid year range 
>> 1980->2099
> 
> As before, perhaps refer to the exact range in the documentation? It's really 
> an instant on the time line that is being compared and not the actual year 
> digits that were provided in the command-line option.

done

> test/jdk/tools/jar/JarEntryTime.java line 180:
> 
>> 178:                                 "2022-03-15T00:00:00+06:00",
>> 179:                                 "2038-11-26T06:06:06+00:00",
>> 180:                                 "2098-02-18T00:00:00-08:00"};
> 
> It would be great to test just inside the exact boundaries of the permitted 
> interval here. That is, test `1980-01-01T00:00:02+00:00` and 
> `2099-12-31T23:59:59+00:00`.

done

> test/jdk/tools/jar/JarEntryTime.java line 251:
> 
>> 249:         // Negative Tests --date out of range source date
>> 250:         String[] badSourceDates = {"1976-06-24T01:02:03+00:00",
>> 251:                                    "2100-02-18T00:00:00-11:00"};
> 
> It would be great to test just outside the exact boundaries of the permitted 
> interval here. That is, test `1980-01-01T00:00:01+00:00` and 
> `2100-01-01T00:00:00+00:00`.

done

-------------

PR: https://git.openjdk.java.net/jdk/pull/6481

Reply via email to