<i18n dev> RFR: 8253459: Formatter treats index, width and precision > Integer.MAX_VALUE incorrectly

Ian Graves igraves at openjdk.java.net
Tue Oct 6 19:13:07 UTC 2020


On Tue, 6 Oct 2020 13:55:55 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

>> The `java.util.Formatter` format specifies support for field widths, argument indexes, or precision lengths of a field
>> that relate to the variadic arguments supplied to the formatter. These numbers are specified by integers, sometimes
>> negative. For argument index, it's specified in the documentation that the highest allowed argument is limited by the
>> largest possible index of an array (ie the largest possible variadic index), but for the other two it's not defined.
>> Moreover, what happens when a number field in a string is too large or too small to be represented by a 32-bit integer
>> type is not defined.  This fix adds documentation to specify what error behavior occurs during these cases.
>> Additionally it adds an additional exception type to throw when an invalid argument index is observed.  A CSR will be
>> required for this PR.
>
> Is the new exception type useful?  yes, it matches the previous pattern.
> But it does not (and none of the IllegalFormatException subclasses) produce a readable message with the offending
> value. So the developer will not see anything useful. The fine grained exceptions provide little value.

I've been on the fence about this, personally. The Formatter uses pretty fine-grained exception types for error
conditions. I'd be okay discontinuing this practice here, but am not sure what to replace this with. Perhaps we enable
`IllegalFormatException` to be, itself, public and instantiable ?

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

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


More information about the i18n-dev mailing list