Sitelet https://web.archive.org/web/20250110211709/https://github.com/skylot/jadx/issues/1316
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: Crash when the path contains a folder named ! #1316

Open
meir555 opened this issue Dec 23, 2021 · 1 comment
Open

Bug: Crash when the path contains a folder named ! #1316

meir555 opened this issue Dec 23, 2021 · 1 comment

Comments

@meir555
Copy link

meir555 commented Dec 23, 2021 •

OS: Windows 10
Steps to reproduce:

  1. Download jadx-gui for windows
  2. Move the files to a folder named ! (for instance: C:\temp!\jadx-gui-1.3.1-no-jre-win.exe)
  3. Run jadx-gui
  4. The program does not start.

Diagnosis of the problem:
Using Procmon I see that jadx-gui starts the process:
"C:\Program Files\Java\jdk-17.0.1\bin\javaw.exe" -Xms328m -Xmx4601m -Dawt.useSystemAAFontSettings=lcd -Dswing.aatext=true -XX:+UseG1GC -classpath "C:\Temp\!\jadx-gui-1.3.1-no-jre-win.exe;lib\jadx-gui-1.3.1-all.jar" jadx.gui.JadxGUI

If I replace javaw.exe with java.exe and run in CMD, I get the error log:

C:\>"C:\Program Files\Java\jdk-17.0.1\bin\java.exe" -Xms328m -Xmx4601m -Dawt.useSystemAAFontSettings=lcd -Dswing.aatext=true -XX:+UseG1GC -classpath "C:\Temp\!\jadx-gui-1.3.1-no-jre-win.exe;lib\jadx-gui-1.3.1-all.jar" jadx.gui.JadxGUI
Failed to auto configure default logger context
Reported exception:
ch.qos.logback.core.joran.spi.JoranException: Could not open URL [jar:file:/C:/Temp/!/jadx-gui-1.3.1-no-jre-win.exe!/logback.xml].
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:57)
        at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
        at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
        at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
        at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
        at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
        at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
        at jadx.gui.JadxGUI.<clinit>(JadxGUI.java:18)
Caused by: java.io.FileNotFoundException: C:\Temp (Access is denied)
        at java.base/java.io.RandomAccessFile.open0(Native Method)
        at java.base/java.io.RandomAccessFile.open(RandomAccessFile.java:344)
        at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:259)
        at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:213)
        at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1312)
        at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1277)
        at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:709)
        at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:243)
        at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:172)
        at java.base/java.util.jar.JarFile.<init>(JarFile.java:347)
        at java.base/sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:103)
        at java.base/sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:72)
        at java.base/sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:191)
        at java.base/sun.net.www.protocol.jar.JarFileFactory.getOrCreate(JarFileFactory.java:91)
        at java.base/sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:132)
        at java.base/sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:175)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:52)
        ... 10 more
15:13:15,892 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
15:13:15,893 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
15:13:15,893 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [jar:file:/C:/Temp/!/jadx-gui-1.3.1-no-jre-win.exe!/logback.xml]
15:13:15,902 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@470e2030 - URL [jar:file:/C:/Temp/!/jadx-gui-1.3.1-no-jre-win.exe!/logback.xml] is not of type file
15:13:15,903 |-ERROR in ch.qos.logback.classic.joran.JoranConfigurator@3fb4f649 - Could not open URL [jar:file:/C:/Temp/!/jadx-gui-1.3.1-no-jre-win.exe!/logback.xml]. java.io.FileNotFoundException: C:\Temp (Access is denied)
        at java.io.FileNotFoundException: C:\Temp (Access is denied)
        at      at java.base/java.io.RandomAccessFile.open0(Native Method)
        at      at java.base/java.io.RandomAccessFile.open(RandomAccessFile.java:344)
        at      at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:259)
        at      at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:213)
        at      at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1312)
        at      at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1277)
        at      at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:709)
        at      at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:243)
        at      at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:172)
        at      at java.base/java.util.jar.JarFile.<init>(JarFile.java:347)
        at      at java.base/sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:103)
        at      at java.base/sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:72)
        at      at java.base/sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:191)
        at      at java.base/sun.net.www.protocol.jar.JarFileFactory.getOrCreate(JarFileFactory.java:91)
        at      at java.base/sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:132)
        at      at java.base/sun.net.www.protocol.jar.JarURLConnection.getInputStream(JarURLConnection.java:175)
        at      at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:52)
        at      at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
        at      at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
        at      at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
        at      at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
        at      at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
        at      at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
        at      at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417)
        at      at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362)
        at      at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:388)
        at      at jadx.gui.JadxGUI.<clinit>(JadxGUI.java:18)

Exception in thread "main" java.lang.ExceptionInInitializerError
        at org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaUI.<clinit>(RSyntaxTextAreaUI.java:43)
        at org.fife.ui.rsyntaxtextarea.RSyntaxTextArea.createRTextAreaUI(RSyntaxTextArea.java:801)
        at org.fife.ui.rtextarea.RTextAreaBase.init(RTextAreaBase.java:656)
        at org.fife.ui.rtextarea.RTextArea.init(RTextArea.java:886)
        at org.fife.ui.rsyntaxtextarea.RSyntaxTextArea.init(RSyntaxTextArea.java:1996)
        at org.fife.ui.rtextarea.RTextAreaBase.<init>(RTextAreaBase.java:82)
        at org.fife.ui.rtextarea.RTextArea.<init>(RTextArea.java:181)
        at org.fife.ui.rsyntaxtextarea.RSyntaxTextArea.<init>(RSyntaxTextArea.java:341)
        at jadx.gui.settings.JadxSettings.<clinit>(JadxSettings.java:48)
        at jadx.gui.settings.JadxSettingsAdapter$1.shouldSkipField(JadxSettingsAdapter.java:37)
        at com.google.gson.internal.Excluder.excludeField(Excluder.java:184)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.excludeField(ReflectiveTypeAdapterFactory.java:69)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.excludeField(ReflectiveTypeAdapterFactory.java:65)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:154)
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
        at com.google.gson.Gson.getAdapter(Gson.java:489)
        at com.google.gson.Gson.fromJson(Gson.java:962)
        at com.google.gson.Gson.fromJson(Gson.java:928)
        at com.google.gson.Gson.fromJson(Gson.java:877)
        at com.google.gson.Gson.fromJson(Gson.java:848)
        at jadx.gui.settings.JadxSettingsAdapter.fromString(JadxSettingsAdapter.java:86)
        at jadx.gui.settings.JadxSettingsAdapter.load(JadxSettingsAdapter.java:61)
        at jadx.gui.JadxGUI.main(JadxGUI.java:23)
Caused by: java.util.MissingResourceException: Can't find bundle for base name org.fife.ui.rsyntaxtextarea.RSyntaxTextArea, locale en_US
        at java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2045)
        at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1683)
        at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1586)
        at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1549)
        at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:858)
        at org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit.<clinit>(RSyntaxTextAreaEditorKit.java:90)
        ... 23 more
Caused by: java.lang.ClassCastException: org.fife.ui.rsyntaxtextarea.RSyntaxTextArea cannot be cast to ResourceBundle
        at java.base/java.util.ResourceBundle$Control.newBundle0(ResourceBundle.java:3211)
        at java.base/java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:3151)
        at java.base/java.util.ResourceBundle.loadBundle(ResourceBundle.java:1984)
        at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1770)
        at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1722)
        at java.base/java.util.ResourceBundle.findBundle(ResourceBundle.java:1722)
        at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1656)
        ... 27 more
@skylot
Copy link
Owner

skylot commented Dec 23, 2021

@meir555 looks like this is a known and very old java issue: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4730642

The '!' in the directory name is interfering with the syntax of a jar url.
According to the specification for Jar URLs found in java.net.JarURLConnection,
"!/" should be recognized as the separator for a jar entry

So only solution is to not use path with directory ends with !.
Best I can do is to add additional check and print error message to notice user about that issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants