On Fri, 16 May 2025 14:23:38 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> David Beaumont has updated the pull request incrementally with one 
>> additional commit since the last revision:
>> 
>>   Changes based on review feedback.
>
> src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java line 114:
> 
>> 112:     private final ZipPath rootdir;
>> 113:     // Starts in readOnly (safe mode), but might be reset at the end of 
>> initialization.
>> 114:     private boolean readOnly = true;
> 
> If `readOnly` gets used by some code when a `ZipFileSystem` instance is being 
> constructed (which is why I believe this can't be a `final` field), then I 
> think we should not change this value to `true`. In other words, would this 
> change now have a chance of introducing a `ReadOnlyFileSystemException` when 
> constructing the `ZipFileSystem` whereas before it wouldn't?

""would this change now have a chance of introducing a 
ReadOnlyFileSystemException when constructing the ZipFileSystem whereas before 
it wouldn't?""

If there was ever a "ReadOnlyFileSystemException" when initializing the 
ZipFileSystem, we have a very serious bug already. Since we already have the 
opening of Zip working for cases where the underlying file is read-only in the 
file system, it has to be true that no attempt is made to modify the file 
contents.

While I accept that this new code now calls out to functions with this flag in 
a different state to before, I believe this is an absolute improvement since:

1. It is not acceptable to say to users "we support a read-only mode" if during 
initialization we might modify the file in any way (even including changing 
last-modification times etc.).

2. All the evidence points to whichever operations are being done during init 
as being fundamentally "read-only" (both due to it working on read-only zip 
files, and there being no conceptual need to modify anything during setup).

I'll happily do a thorough audit of everything which could be affected by this 
change if that will give you confidence, but I would not want to change this 
code back to its default "read-write until stated otherwise" behaviour.

> src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java line 245:
> 
>> 243:                     : "The underlying ZIP file is not writable";
>> 244:             throw new IOException(
>> 245:                     "A writable ZIP file system could not be opened 
>> for: " + zfpath + "\n" + reason);
> 
> The JDK coding guidelines recommend excluding file paths from exception 
> messages. So in this case the `zfpath` should be left out from the exception 
> message. Additionally, I haven't seen us using newline characters in 
> exception messages that we construct in the JDK code. So I think we should 
> leave that out too. 
> 
> Given this, I think it might be simpler to just change this `if` block to 
> something like:
> 
> 
> 
> if (...) {
>     String reason = multiReleaseVersion.isPresent()
>         ? "the multi-release JAR file is not writable"
>         : "the ZIP file is not writable";
> 
>     throw new IOException(reason);
> }

Thanks for letting me know. Now I think about the "no filename" things is very 
sensible for core libraries.
Done.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/25178#discussion_r2095517691
PR Review Comment: https://git.openjdk.org/jdk/pull/25178#discussion_r2095520598

Reply via email to