RFR: 8287102: ImageReaderSPI.canDecode should not throw EOFException

Martin Desruisseaux duke at openjdk.java.net
Sun May 22 17:38:07 UTC 2022


Invoking `ImageReaderSpi.canDecodeInput(Object)` with a stream having less than 8 bytes causes an `EOFException` to be thrown instead of returning `false`. This is caused by BMP, WBMP, GIF, PNG and TIFF reader implementations assuming that those bytes always exist and not checking EOF conditions. The JPEG reader is not impacted.

The `CanDecodeTest` class in this pull request reproduces the problem and verifies that the patch solves it. The changes in `canDecodeInput(Object)` method bodies are:

* Use `ImageInputStream.read()` instead of `readByte()` and check for -1 (EOF) return value.
* Replace `ImageInputStream.readFully(byte[])` calls by a private `tryReadFully` method.

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

Commit messages:
 - 8287102: ImageReaderSpi.canDecodeInput() for standard plugins should return false if a stream is too short

Changes: https://git.openjdk.java.net/jdk/pull/8700/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8700&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8287102
  Stats: 150 lines in 8 files changed: 129 ins; 9 del; 12 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8700.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8700/head:pull/8700

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



More information about the client-libs-dev mailing list