Please review this PR which improves validation of unmappable characters in names in the `ZipFileSystem` and `ZipFileOutputStream` APIs.
Currently, `ZipFileSystem::getPath` and `ZipFileOutputStream:putNextEntry` both throw `IllegalArgumentException` when rejecting a path or entry name which cannot be encoded with the given charset. This PR fixes `ZipFileSystem::getPath` to instead throw `InvalidPathException` as specified. Similarly, `ZipOutputStream::putNextEntry` is updated to throw `ZipException` a specified. Related, `ZipOutputStream::putNextEntry` is updated to reject unmappable ZipEntry comments in a similar fashion. This change effectively means that `ZipOutputStream` now encodes names and comments twice, once in `putNextEntry` and second time in `writeCEN` when the stream is closed. An alternative would be to capture the encoded byte arrays in the `XEntry`, however this would increase retained heap memory for large number of entries. New tests are added in the ZipFS and ZipFileOutputStream area to verify that these APIs throw exceptions according to their specifications when faced with unmappable characters. Curiously, `ZipFileOutputStream::setComment` is not specified to throw for an unmappable comment. Long standing unspecified behavior is to throw IllegalArgumentException. To prevent regressions, a test is added to verify this. An alternative path here would be to update the specification with a CSR. ------------- Commit messages: - ZipFileSystem and ZipOutputStream should reject unmappable entry / path names or comments with specified exceptions instead of IllegalArgumentException Changes: https://git.openjdk.org/jdk/pull/30319/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=30319&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8380452 Stats: 193 lines in 4 files changed: 191 ins; 0 del; 2 mod Patch: https://git.openjdk.org/jdk/pull/30319.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/30319/head:pull/30319 PR: https://git.openjdk.org/jdk/pull/30319
