RFR: 8292327: java.io.EOFException in InflaterInputStream after JDK-8281962 [v2]
Alan Bateman
alanb at openjdk.org
Tue Aug 16 06:20:24 UTC 2022
On Mon, 15 Aug 2022 20:23:16 GMT, Volker Simonis <simonis at openjdk.org> wrote:
>> 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."
>
> Volker Simonis has updated the pull request incrementally with one additional commit since the last revision:
>
> Minor changes regarding indentation, naming and spelling
> The problem is that after [JDK-8281962](https://bugs.openjdk.org/browse/JDK-8292327)
In the description, this should link to JDK-8281962 rather than (JDK-8292327). Just pointing out as someone looking at this PR in the future might get confused as to which issue caused the regression.
-------------
PR: https://git.openjdk.org/jdk/pull/9881
More information about the core-libs-dev
mailing list