> 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.
Eirik Bjørsnøs has updated the pull request incrementally with one additional commit since the last revision: initCause original exception ------------- Changes: - all: https://git.openjdk.org/jdk/pull/30319/files - new: https://git.openjdk.org/jdk/pull/30319/files/fb2d95fb..1deca2ea Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=30319&range=01 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=30319&range=00-01 Stats: 6 lines in 2 files changed: 3 ins; 0 del; 3 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
