There were three concerns with the previous changes to `XbmImageDecoder`.
1. Only the first line of the bit array was read.
2. The regex was incorrect because it used `[]` instead of `()` for some 
grouping.
3. The ordering of the width and height in the xbm file was too strict and had 
to be width first, then height.

To fix these issues, I have:
1. Used a StringBuilder to append lines of the bit array to parse the entire 
array at once.
2. Updated the regex to capture starting whitespace, optionally start with 
`0x`, include all chars/digits/punctuation (minus `,` and `};`) instead of just 
valid hex digits, and end with either `,` or `};`. This also allows for 
incorrect hex values such as `0x12345abcde` to be detected since the new regex 
allows for multiple chars after the `0x` until the next delimiter is found. 
This is accounted for in the test xbm files.
3. Determined width or height based off of ending letters (`th` or `t`). This 
is similar to 
https://github.com/openjdk/jdk/blob/jdk-26+10/src/java.desktop/share/classes/sun/awt/image/XbmImageDecoder.java#L109-L112.

A new method is added to `XBMDecoderTest.java` to better check that the bit 
array parsing works. This method checks for non-empty pixel data.

A new xbm file is also added to check for the case where `0xAB+` exists in the 
bit array. This should be invalid, and the previous regex would allow this to 
pass. 

All tests pass with the new changes made here.

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

Commit messages:
 - Update copyright year
 - Initial commit

Changes: https://git.openjdk.org/jdk/pull/29120/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29120&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8373727
  Stats: 123 lines in 4 files changed: 70 ins; 16 del; 37 mod
  Patch: https://git.openjdk.org/jdk/pull/29120.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29120/head:pull/29120

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

Reply via email to