Skip to content

ClassLoader fails to load java classes with null byte naming #50

Closed
@Moudoux

Description

@Moudoux

As the title says, loading a mod jar which has null characters in the file name will make Minecraft crash when using this (Latest Forge 1.16.1), the normal Minecraft loader does not do this, nor does other loaders like Fabric.

The main error is: Error: java.nio.file.InvalidPathException: Path: nul character not allowed: followed by the path itself.

The whole stacktrace:

java.nio.file.InvalidPathException: Path: nul character not allowed: <null character>/<the path to my class>
    at com.sun.nio.zipfs.ZipPath.normalize(ZipPath.java:448)
    at com.sun.nio.zipfs.ZipPath.<init>(ZipPath.java:76)
    at com.sun.nio.zipfs.ZipPath.<init>(ZipPath.java:67)
    at com.sun.nio.zipfs.ZipFileSystem.getPath(ZipFileSystem.java:186)
    at com.sun.nio.zipfs.ZipFileSystem.getPath(ZipFileSystem.java:80)
    at net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer$MinecraftLocator.findPathJar(ModDiscoverer.java:200)
    at net.minecraftforge.fml.loading.moddiscovery.ModDiscoverer$MinecraftLocator.findPath(ModDiscoverer.java:187)
    at net.minecraftforge.fml.loading.moddiscovery.ModFile.findResource(ModFile.java:181)
    at net.minecraftforge.fml.loading.LoadingModList.findURLForResource(LoadingModList.java:126)
    at net.minecraftforge.fml.loading.FMLCommonLaunchHandler.lambda$getClassLoaderLocatorFunction$5(FMLCommonLaunchHandler.java:132)
    at net.minecraftforge.fml.loading.FMLCommonLaunchHandler$$Lambda$409/664839586.apply(Unknown Source)
    at cpw.mods.modlauncher.TransformationServicesHandler.lambda$alternate$1(TransformationServicesHandler.java:52)
    at cpw.mods.modlauncher.TransformationServicesHandler$$Lambda$414/651235118.apply(Unknown Source)
    at cpw.mods.modlauncher.TransformationServicesHandler.lambda$alternate$1(TransformationServicesHandler.java:52)
    at cpw.mods.modlauncher.TransformationServicesHandler$$Lambda$414/651235118.apply(Unknown Source)
    at cpw.mods.modlauncher.TransformingClassLoader.lambda$alternate$10(TransformingClassLoader.java:85)
    at cpw.mods.modlauncher.TransformingClassLoader$$Lambda$420/295055909.apply(Unknown Source)
    at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:218)
    at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:126)
    at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:96)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
    at java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:814)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at <my class calling a new MyClass()>```
 
The null character is a common in obfuscation programs, and forge with modlauncher cannot load it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions