> Please consider this PR which makes `DeflaterOutputStream.close()` always > close its wrapped output stream exactly once. > > Currently, closing of the wrapped output stream happens outside the finally > block where `finish()` is called. If `finish()` throws, this means the > wrapped stream will not be closed. This can potentially lead to leaking > resources such as file descriptors or sockets. > > This fix is to move the closing of the wrapped stream inside the finally > block. > > Additionally, the `closed = true;` statement is moved to the start of the > close method. This makes sure we only ever close the wrapped stream once > (this aligns with the overridden method `FilterOutputStream.close´) > > Specification: This change brings the implementation of > `DeflaterOutputStream.close()` in line with its specification: *Writes > remaining compressed data to the output stream and closes the underlying > stream.* > > Risk: This is a behavioural change. There is a small risk that existing code > depends on the close method not following its specification. > > Testing: The PR adds a new JUnit 5 test `CloseWrappedStream.java` which > simulates the failure condition and verifies that the wrapped stream was > closed under failing and non-failing conditions.
Eirik Bjørsnøs has updated the pull request incrementally with one additional commit since the last revision: Update test/jdk/java/util/zip/ZipOutputStream/CloseWrappedStream.java Remove extra whitespace Co-authored-by: Andrey Turbanov <turban...@gmail.com> ------------- Changes: - all: https://git.openjdk.org/jdk/pull/17209/files - new: https://git.openjdk.org/jdk/pull/17209/files/33e7756e..96deca07 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=17209&range=03 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=17209&range=02-03 Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod Patch: https://git.openjdk.org/jdk/pull/17209.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/17209/head:pull/17209 PR: https://git.openjdk.org/jdk/pull/17209