RFR: 8282444: Module finder incorrectly assumes default file system path-separator character

Alan Bateman alanb at openjdk.java.net
Mon Feb 28 14:37:48 UTC 2022


On Mon, 28 Feb 2022 11:12:17 GMT, Chris Hegarty <chegar at openjdk.org> wrote:

> The module finder implementation incorrectly uses the path-separator
> character from the default file system, when mapping the relative path
> of an entry in an exploded module to a package name. This causes
> problems on Windows [*] when using a module finder with a custom file
> system that has a path-separator character that differs from that of the
> default file system, e.g. the zip file system (which uses '/',
> rather than '\' ).
> 
> Rather than adding a new test for this, I deciced to just modify an
> existing one. The existing test exercises the module finder with a
> custom file system, but does so with modules have trivial single-level
> packages names. I just expanded the module to have a subpackage. This
> is sufficient to reproduce the bug, and verify the fix.
> 
> [*]
> 
> java.lang.module.FindException: Error reading module: /m2
>         at java.base/jdk.internal.module.ModulePath.readModule(ModulePath.java:350)
>         at java.base/jdk.internal.module.ModulePath.scanDirectory(ModulePath.java:284)
>         at java.base/jdk.internal.module.ModulePath.scan(ModulePath.java:232)
>         at java.base/jdk.internal.module.ModulePath.scanNextEntry(ModulePath.java:190)
>         at java.base/jdk.internal.module.ModulePath.findAll(ModulePath.java:166)
>         at ModulesInCustomFileSystem.listAllModules(ModulesInCustomFileSystem.java:108)
>         at ModulesInCustomFileSystem.testZipFileSystem(ModulesInCustomFileSystem.java:97)
>         at ModulesInCustomFileSystem.testExplodedModulesInZipFileSystem(ModulesInCustomFileSystem.java:68)
>         at ...
> Caused by: java.lang.module.InvalidModuleDescriptorException: Package q.r not found in module
>         at java.base/jdk.internal.module.ModuleInfo.invalidModuleDescriptor(ModuleInfo.java:1212)
>         at java.base/jdk.internal.module.ModuleInfo.doRead(ModuleInfo.java:330)
>         at java.base/jdk.internal.module.ModuleInfo.read(ModuleInfo.java:129)
>         at java.base/jdk.internal.module.ModulePath.readExplodedModule(ModulePath.java:689)
>         at java.base/jdk.internal.module.ModulePath.readModule(ModulePath.java:320)
>         ... 36 more

The update to ModulePath looks okay. The tests for ModulePath with paths to locate files in custom file systems are somewhat minimal and probably should be expanded to ensure that there aren't any other issues. Updating the existing ModulesInCustomFileSystem test to use a deeper package structure is subtle but okay for now but we should create another issue to create more tests for custom file systems. I assume you'll update the date in the copyright header of the changed files.

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

PR: https://git.openjdk.java.net/jdk/pull/7632


More information about the core-libs-dev mailing list