On Fri, 20 Mar 2026 19:29:41 GMT, Lance Andersen <[email protected]> wrote:

> Yes I see what you are saying and I agree with the validation happening 
> earlier. I just want to avoid multiple try blocks for this. Could do 
> something similar to ZipFile::initCen which keeps it tidier

Sorry for being slow,  I finally think I understand: You want to coalesce the 
try/catch for validating name and comment because you find the repeated try / 
catch noisy or untidy.

ZipFile::initCen is somewhat different in that it processes a pre-existing ZIP 
which is either corrupt or opened using an unexpected Charset. So the source of 
the problem is more far removed.

In the ZipOutputStream producer case, where a user is supplying the name or 
comment directly, I think knowing whether it was the name or the comment that 
was incorrect is useful informartion for the user.

How about we extract the try / catch into a helper / checker method, such that 
the validation looks like this:


        // Verify that entry name and comment can be encoded
        checkEncodable(e.name, "unmappable character in ZIP entry name");
        if (e.comment != null) {
            checkEncodable(e.comment, "unmappable character in ZIP entry 
comment");
        }
``` 

where checkEncodable is:


    // Throws ZipException if the given string cannot be encoded
    private void checkEncodable(String str, String msg) throws ZipException {
        try {
            zc.getBytes(str);
        } catch (IllegalArgumentException ex) {
            throw (ZipException) new ZipException(msg).initCause(ex);
        }
    }

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/30319#discussion_r2967951201

Reply via email to