On Tue, 2 Jun 2026 01:08:21 GMT, Xueming Shen <[email protected]> wrote:

>> This fixes a regression from JDK-8377070 where `ImageResourcesTree` treated 
>> every image entry path as a package hierarchy. That implicitly assumes 
>> directory path segments cannot contain `.`, which is true for package paths 
>> but not for ordinary resources such as 
>> `META-INF/maven/com.google.code.findbugs/...`.
>> 
>> The fix handles non-preview `META-INF/` entries as resource paths, 
>> preserving their directory names as-is and avoiding package inference for 
>> those resources. `META-INF/preview/` continues to use the existing 
>> package-oriented handling because those entries represent preview 
>> class/package content.
>> 
>> A regression test was added to `ImageReaderTest` with `META-INF` resources 
>> containing dotted path segments, verifying resource lookup and directory 
>> contents in both preview-enabled and preview-disabled modes.
>> 
>> This change was developed by @david-beaumont.
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> src/jdk.jlink/share/classes/jdk/tools/jlink/internal/ImageResourcesTree.java 
> line 252:
> 
>> 250:                         parentNode = 
>> getDirectoryNode(resPath.substring(i + 1, j), parentNode);
>> 251:                     }
>> 252:                     new ResourceNode(resPath.substring(pathEnd + 1), 
>> parentNode);
> 
> @AlanBateman  It appears we might still need the logic we have at 
> line#285-293? 
> 
>                     String resourceName = resPath.substring(pathEnd + 1);
>                     Node resourceNode = parentNode.getChildren(resourceName);
>                     if (resourceNode == null) {
>                         new ResourceNode(resourceName, parentNode);
>                     } else if (!(resourceNode instanceof ResourceNode)) {
>                         throw new InvalidTreeException(resourceNode);
>                     }
> 
> otherwise we might mishandle the bad input like
> 
> /modfoo/META-INF/foo/bar.properties
> /modfoo/META-INF/foo

Can you construct a test to demonstrate what you mean? For 
`/modfoo/META-INF/foo/bar.properties` it should construct a resource node for 
"bar.properties" with "foo" as the parent and just. But maybe you mean 
resources in META-INF/preview ?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/31318#discussion_r3339560114

Reply via email to