Can I please get a review of this change which addresses the issue noted in 
https://bugs.openjdk.org/browse/JDK-8369181?

As noted in that issue, if `finish()` is called on a `InflaterOutputStream` 
that was constructed without passing a `Inflater`, then any subsequent 
`write()`s on that `InflaterOutputStream` result in an `IllegalStateException`, 
because we close the `Inflater` in `finish()`. The commit in this PR, fixes the 
issue by throwing the specified `IOException` in place of the 
`IllegalStateException`. 

At the same time, the documentation of `finish()` has been enhanced to clarify 
the current behaviour, through a `@implSpec`.

Alternative approaches of deprecating finish() and/or not closing the default 
Inflater were considered, but given the current long standing implementation of 
finish(), it was decided to merely specify the current behaviour of closing the 
 default Inflater in finish().

A new jtreg test has been added to reproduce the issue and verify the fix. 
tier1, tier2, tier3 testing of this change completed without any related issues.

I'll file a CSR shortly for this change.

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

Commit messages:
 - 8369181 (v1): InflaterOutputStream: writing after finish() results in a 
NullPointerException (NPE) instead of an IOException

Changes: https://git.openjdk.org/jdk/pull/29935/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29935&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8369181
  Stats: 220 lines in 2 files changed: 196 ins; 4 del; 20 mod
  Patch: https://git.openjdk.org/jdk/pull/29935.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29935/head:pull/29935

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

Reply via email to