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
