Please review this PR which handles incorrect CompactNumberFormat integer only 
parsing when there is no suffix.

See the following snippet,


var fmt = NumberFormat.getCompactNumberInstance(Locale.US, 
NumberFormat.Style.SHORT)
fmt.setParseIntegerOnly(true)
fmt.parse("5K") // returns 5000
fmt.parse("50.00") // returns 50
fmt.parse("5") // unexpectedly throws StringIndexOutOfBoundsException 
fmt.parse("5 ") // returns 5


Within the `parse` method, there is code that advances `position` past the 
fractional portion to find the suffix when `parseIntegerOnly()` is true. 
However, if a valid string input is given with no suffix, 
`DecimalFormat.subparseNumber()` will fully iterate through the string and 
`position` will be equal to the length of the string, throwing 
StringIndexOutOfBoundsException when `charAt` is invoked (line 1740).

We should check to make sure position does not exceed the string length before 
deciding to check for a decimal symbol.

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

Commit messages:
 - init

Changes: https://git.openjdk.org/jdk/pull/19533/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19533&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8333456
  Stats: 69 lines in 2 files changed: 68 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/19533.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19533/head:pull/19533

PR: https://git.openjdk.org/jdk/pull/19533

Reply via email to