RFR: 8292327: java.io.EOFException in InflaterInputStream after JDK-8281962
Volker Simonis
simonis at openjdk.org
Mon Aug 15 17:59:23 UTC 2022
The problem is that after [JDK-8281962](https://bugs.openjdk.org/browse/JDK-8292327) we call `fill()` unconditionally (and before calling `Inflater::inflate()`) in `InflaterInputStream::read()` if `Inflater::needsInput()` is true. This misses the case where the native inflater has consumed all its input (i.e. `Inflater::needsInput()` returns true) but hasn't managed to write all the inflated data into the output buffer (e.g. because it was to small). In rare cases, there might be now more input available (i.e. calling `InflaterInputStream::fill()` will throw an `EOFException`) but we still have to call `Inflater::inflate()` to consume the buffered output from the underlying native inflater until inflation stops.
The documentation of the `inflate()` method in `zlib.h` mentions this explicitely:
> "If `inflate()` returns `Z_OK` and with zero `avail_out`, it must be called again after making room in the output buffer because there might be more output pending."
-------------
Commit messages:
- 8292327: java.io.EOFException in InflaterInputStream after JDK-8281962
Changes: https://git.openjdk.org/jdk/pull/9881/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9881&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8292327
Stats: 78 lines in 3 files changed: 77 ins; 0 del; 1 mod
Patch: https://git.openjdk.org/jdk/pull/9881.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/9881/head:pull/9881
PR: https://git.openjdk.org/jdk/pull/9881
More information about the core-libs-dev
mailing list