LWJGL / lwjgl3

LWJGL is a Java library that enables cross-platform access to popular native APIs useful in the development of graphics (OpenGL, Vulkan, bgfx), audio (OpenAL, Opus), parallel computing (OpenCL, CUDA) and XR (OpenVR, LibOVR, OpenXR) applications.
https://www.lwjgl.org
BSD 3-Clause "New" or "Revised" License
4.76k stars 636 forks source link

lwjgl natives won't load with usernames which are not valid in paths #790

Closed Adam- closed 2 years ago

Adam- commented 2 years ago

Version

3.3.1

Platform

Windows x64

JDK

adoptopenjdk

Module

core

Bug description

A user had set their system username to Daylen, however folders cannot have trailing spaces on Windows. Windows then uses TEMP for the user directory (C:\Users\TEMP) because of this, however the jvm user.name contains the name with the trailing slash. This causes lwjgl to fail to load natives due to being unable to create the temporary directory.

Vaguely related to this, I've seen if you run both a 32 and 64bit jvm at once, lwjgl cannot start on the 2nd vm due to them both choosing the same temp dir location and fighting with each other.

I recommend changing the default SHARED_LIBRARY_EXTRACT_DIRECTORY to lwjgl- + os.arch perhaps.

Stacktrace or crash log output

2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher - Java Environment:
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.desktop: windows
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   awt.toolkit: sun.awt.windows.WToolkit
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.specification.version: 11
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   org.lwjgl.util.Debug: true
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.cpu.isalist: amd64
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.jnu.encoding: Cp1252
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.class.path: C:\Users\TEMP\AppData\Local/Runelite/RuneLite.jar
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.awt.enableExtraMouseButtons: true
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.vendor: AdoptOpenJDK
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.arch.data.model: 64
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.variant: 
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vendor.url: https://adoptopenjdk.net/
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.timezone: America/Denver
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   os.name: Windows 10
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.specification.version: 11
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   runelite.launcher.version: 2.4.2
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.java.launcher: SUN_STANDARD
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.country: CA
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.boot.library.path: C:\Users\TEMP\AppData\Local\Runelite\jre\bin
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.java.command: C:\Users\TEMP\AppData\Local/Runelite/RuneLite.jar --nojvm --debug
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   jdk.debug: release
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.cpu.endian: little
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.home: C:\Users\TEMP
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.language: en
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.specification.vendor: Oracle Corporation
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.version.date: 2020-07-14
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.home: C:\Users\TEMP\AppData\Local\Runelite\jre
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.net.preferIPv4Addresses: true
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   file.separator: \
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.compressedOopsMode: Zero based
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   line.separator: 

2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.specification.name: Java Platform API Specification
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.specification.vendor: Oracle Corporation
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.awt.graphicsenv: sun.awt.Win32GraphicsEnvironment
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.script: 
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.management.compiler: HotSpot 64-Bit Tiered Compilers
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.java2d.d3d: true
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.runtime.version: 11.0.8+10
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.name: Daylen 
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.net.preferIPv4Stack: true
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   path.separator: ;
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   os.version: 10.0
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   org.lwjgl.util.DebugLoader: true
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.runtime.name: OpenJDK Runtime Environment
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   file.encoding: Cp1252
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.name: OpenJDK 64-Bit Server VM
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vendor.version: AdoptOpenJDK
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vendor.url.bug: https://github.com/AdoptOpenJDK/openjdk-support/issues
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.io.tmpdir: C:\Users\TEMP\AppData\Local\Temp\
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   javax.net.ssl.trustStoreType: Windows-ROOT
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.version: 11.0.8
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   user.dir: C:\Users\TEMP
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   os.arch: amd64
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.specification.name: Java Virtual Machine Specification
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.awt.printerjob: sun.awt.windows.WPrinterJob
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.os.patch.level: 
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.library.path: C:\Users\TEMP\AppData\Local\Runelite\jre\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64\compiler;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Users\TEMP\AppData\Local\Microsoft\WindowsApps;;.
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.info: mixed mode
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vendor: AdoptOpenJDK
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.vm.version: 11.0.8+10
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.java2d.opengl: false
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   sun.io.unicode.encoding: UnicodeLittle
2022-07-31 17:13:39 [main] DEBUG net.runelite.launcher.Launcher -   java.class.version: 55.0
java.lang.RuntimeException:     Failed to extract lwjgl library
    at org.lwjgl.system.SharedLibraryLoader.load(SharedLibraryLoader.java:93)
    at org.lwjgl.system.Library.loadSystem(Library.java:123)
    at org.lwjgl.system.Library.loadSystem(Library.java:63)
    at org.lwjgl.system.Library.<clinit>(Library.java:51)
    at org.lwjgl.opengl.GL.<clinit>(GL.java:80)
    at net.runelite.client.plugins.gpu.GpuPlugin.lambda$startUp$1(GpuPlugin.java:305)
    at net.runelite.client.callback.ClientThread.invoke(ClientThread.java:99)
    at net.runelite.client.callback.Hooks.tick(Hooks.java:203)
    at client.ha(client.java:15509)
    at client.ag(client.java)
    at as.io(as.java:359)
    at as.run(as.java:338)
    at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.nio.file.InvalidPathException: Trailing char < > at index 11: lwjglDaylen \3.3.1-build-7\lwjgl.dll
    at java.base/sun.nio.fs.WindowsPathParser.normalize(Unknown Source)
    at java.base/sun.nio.fs.WindowsPathParser.parse(Unknown Source)
    at java.base/sun.nio.fs.WindowsPathParser.parse(Unknown Source)
    at java.base/sun.nio.fs.WindowsPath.parse(Unknown Source)
    at java.base/sun.nio.fs.WindowsFileSystem.getPath(Unknown Source)
    at java.base/java.nio.file.Path.of(Unknown Source)
    at java.base/java.nio.file.Paths.get(Unknown Source)
    at org.lwjgl.system.SharedLibraryLoader.getExtractPath(SharedLibraryLoader.java:138)
    at org.lwjgl.system.SharedLibraryLoader.load(SharedLibraryLoader.java:70)
    ... 12 more
Spasi commented 2 years ago

Thank you @Adam-!

The next 3.3.2 snapshot will be trimming user.name and the extract path will have a CPU architecture component.