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

Reply via email to