RFR: 8345506: jar --validate may lead to java.nio.file.FileAlreadyExistsException [v2]
Jaikiran Pai
jpai at openjdk.org
Mon Dec 16 15:15:25 UTC 2024
> Can I please get a review of this change which proposes to address the issue reported in https://bugs.openjdk.org/browse/JDK-8345506?
>
> The `jar` tool has several operations which take `--file` as a parameter. The value for that option is a JAR file path. The `jar` operation is then run against that JAR file. The `--file` parameter is optional and when it isn't provided, the `jar` tool expects the JAR file content to be streamed through STDIN of the `jar` process.
>
> The issue here is that the `--validate` option has a bug in the implementation where when the `--file` option is absent, it tries to read from the STDIN into a temporary file that the implementation just created. To do so it uses `Files.copy(...)` which throws an exception if the destination file exists (which it does in this case because that temporary destination file was created just a few lines above).
>
> The fix in this commit address this issue by using an alternate way to transfer the JAR content into the temporary file.
>
> A new jtreg test has been introduced to reproduce the issue and verify the fix. I couldn't locate any other existing test which was exercising the code path which deals with `jar` operations against the STDIN of the `jar` process. So the new jtreg test has test for other operations and not just `--validate` operation.
>
> The new test and existing tests in tier1, tier2 and tier3 continue to pass with this change.
Jaikiran Pai has updated the pull request incrementally with one additional commit since the last revision:
include a test for "jar --update"
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/22734/files
- new: https://git.openjdk.org/jdk/pull/22734/files/d505e418..68c695e1
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=22734&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=22734&range=00-01
Stats: 39 lines in 1 file changed: 39 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/22734.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/22734/head:pull/22734
PR: https://git.openjdk.org/jdk/pull/22734
More information about the core-libs-dev
mailing list