onyxbits / raccoon4

APK Downloader for Google Play
https://raccoon.onyxbits.de
Apache License 2.0
644 stars 90 forks source link

Can't start raccoon on Debian Sid #100

Closed rizaumami closed 2 years ago

rizaumami commented 2 years ago
iza@sid:~$ uname -a
Linux sid 5.14.0-3-amd64 #1 SMP Debian 5.14.12-1 (2021-10-14) x86_64 GNU/Linux

Using openjdk-11-jre:

iza@sid:~$ java --version
openjdk 11.0.13 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-post-Debian-1)
OpenJDK 64-Bit Server VM (build 11.0.13+8-post-Debian-1, mixed mode, sharing)
iza@sid:~$ java -jar '/home/iza/Downloads/raccoon-4.19.0.jar' 
Oct 29, 2021 8:49:21 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose start
Oct 29, 2021 8:49:21 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose synched
Oct 29, 2021 8:49:21 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose script done
Oct 29, 2021 8:49:21 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose end
java.lang.ExceptionInInitializerError
    at de.onyxbits.raccoon.gui.MainLifecycle.onCreatePrimaryWindow(MainLifecycle.java:189)
    at de.onyxbits.weave.LifecycleManager.getWindow(LifecycleManager.java:100)
    at de.onyxbits.weave.LifecycleManager.run(LifecycleManager.java:89)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.IllegalArgumentException
    at java.base/java.util.Currency.getInstance(Currency.java:393)
    at de.onyxbits.raccoon.Bookmarks.<clinit>(Bookmarks.java:47)
    ... 16 more
java.lang.NullPointerException
    at de.onyxbits.weave.diag.DefaultReportHandler.getFile(DefaultReportHandler.java:70)
    at de.onyxbits.weave.diag.DefaultReportHandler.isDuplicate(DefaultReportHandler.java:66)
    at de.onyxbits.weave.diag.ReportManager.handle(ReportManager.java:202)
    at de.onyxbits.weave.diag.ReportBackend.uncaughtException(ReportBackend.java:55)
    at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1055)
    at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1050)
    at java.desktop/java.awt.EventDispatchThread.processException(EventDispatchThread.java:222)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:214)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Exception: java.lang.NullPointerException thrown from the UncaughtExceptionHandler in thread "AWT-EventQueue-0"

Using openjdk-18-jre:

iza@sid:~$ java --version
openjdk 18-ea 2022-03-15
OpenJDK Runtime Environment (build 18-ea+20-Debian-1)
OpenJDK 64-Bit Server VM (build 18-ea+20-Debian-1, mixed mode, sharing)
iza@sid:~$ java -jar '/home/iza/Downloads/raccoon-4.19.0.jar' 
Oct 29, 2021 8:51:24 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose start
Oct 29, 2021 8:51:24 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose synched
Oct 29, 2021 8:51:25 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose script done
Oct 29, 2021 8:51:25 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose end
java.lang.ExceptionInInitializerError
    at de.onyxbits.raccoon.gui.MainLifecycle.onCreatePrimaryWindow(MainLifecycle.java:189)
    at de.onyxbits.weave.LifecycleManager.getWindow(LifecycleManager.java:100)
    at de.onyxbits.weave.LifecycleManager.run(LifecycleManager.java:89)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.IllegalArgumentException
    at java.base/java.util.Currency.getInstance(Currency.java:399)
    at de.onyxbits.raccoon.Bookmarks.<clinit>(Bookmarks.java:47)
    ... 16 more
java.lang.NullPointerException: Cannot invoke "java.math.BigInteger.toString(int)" because the return value of "de.onyxbits.weave.diag.Report.getFingerprint()" is null
    at de.onyxbits.weave.diag.DefaultReportHandler.getFile(DefaultReportHandler.java:70)
    at de.onyxbits.weave.diag.DefaultReportHandler.isDuplicate(DefaultReportHandler.java:66)
    at de.onyxbits.weave.diag.ReportManager.handle(ReportManager.java:202)
    at de.onyxbits.weave.diag.ReportBackend.uncaughtException(ReportBackend.java:55)
    at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1082)
    at java.base/java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1077)
    at java.desktop/java.awt.EventDispatchThread.processException(EventDispatchThread.java:222)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:214)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
onyxbits commented 2 years ago

That seems to be a misconfigured JVM (probably the server, not the desktop java edition), not a bug in Raccoon.

jpstotz commented 2 years ago

@onyxbits I disagree. This bug is caused here: https://github.com/onyxbits/raccoon4/blob/master/src/main/java/de/onyxbits/weave/diag/ReportManager.java#L109

if e.getMessage() returns null (which happens on certain exceptions) this bug happens as report.setFingerprint is never called. Therefore this is a problem of bad error handling of Raccoon.

onyxbits commented 2 years ago

That's just a detour. The basal bug happens somewhere between the Locale and Currency class (Currency getting an invalid Locale). This should not normally happen. At least not with a desktop Java edition. AFAIR, Debian offers a server edition which is basically a stripped down variant. So my guess here is missing config files.

jpstotz commented 2 years ago

Your guess may be correct, it is difficult to know what the original exception was if the exception handling code fails and raises an exception on it's own...

In my opinion an exception handling code should be safe in all cases. Therefore I would recommend to add an report.setFingerprint(new BigInteger.ZERO); in the empty exception handler https://github.com/onyxbits/raccoon4/blob/master/src/main/java/de/onyxbits/weave/diag/ReportManager.java#L113 or alternatively add a null check every where getFingerprint() is called.