RFR: 8313739: ZipOutputStream.close() should always close the wrapped stream [v3]
Eirik Bjørsnøs
eirbjo at openjdk.org
Tue Jan 2 12:21:21 UTC 2024
> Please consider this PR which makes `DeflaterOutputStream.close()` always close its wrapped output stream.
>
> 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.
>
> 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 two additional commits since the last revision:
- Add more extensive testing of combined write/close failure modes
- Don't suppress if finishException is null, mark stream as closed even when closing the wrapped stream failed
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/17209/files
- new: https://git.openjdk.org/jdk/pull/17209/files/02707d58..33e7756e
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=17209&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=17209&range=01-02
Stats: 149 lines in 2 files changed: 123 ins; 2 del; 24 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
More information about the core-libs-dev
mailing list