From caec0c3eaaef1eafac917b47a14090ff9e475e75 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 1 Jun 2016 22:44:03 +0200 Subject: [PATCH 1/2] fix crash if an APK has a short embedded description caught java.lang.StringIndexOutOfBoundsException: at java.lang.String.substring(String.java:1651) at java.lang.String.subSequence(String.java:2040) at org.fdroid.fdroid.data.App.setFromPackageInfo(App.java:298) at org.fdroid.fdroid.data.App.(App.java:268) at org.fdroid.fdroid.localrepo.CacheSwapAppsService.onHandleIntent(CacheSwapAppsService.java:78) at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.os.HandlerThread.run(HandlerThread.java:60) --- app/src/main/java/org/fdroid/fdroid/data/App.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/App.java b/app/src/main/java/org/fdroid/fdroid/data/App.java index 94e1af011..8d8fd8b22 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/App.java +++ b/app/src/main/java/org/fdroid/fdroid/data/App.java @@ -272,8 +272,10 @@ public class App extends ValueObject implements Comparable { final CharSequence appDescription = appInfo.loadDescription(pm); if (TextUtils.isEmpty(appDescription)) { this.summary = "(installed by " + installerPackageLabel + ")"; - } else { + } else if (appDescription.length() > 40) { this.summary = (String) appDescription.subSequence(0, 40); + } else { + this.summary = (String) appDescription; } this.packageName = appInfo.packageName; this.added = new Date(packageInfo.firstInstallTime); From 558c0a3e0e6731e5791eabe1eca5b9ce0eacb580 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 14 Jun 2016 12:34:10 +0200 Subject: [PATCH 2/2] never have null Apks in InstallManagerService In order to avoid having null guards making the code ugly, use a "blank" instance of Apk which will work for the various comparisons. This fixes this crash: java.lang.NullPointerException at org.fdroid.fdroid.installer.InstallManagerService$4.onReceive(InstallManagerService.java:243) at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297) at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46) at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5001) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) at dalvik.system.NativeStart.main(Native Method) --- .../org/fdroid/fdroid/installer/InstallManagerService.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java index b3a382943..4d6f1bf7b 100644 --- a/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java +++ b/app/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java @@ -363,9 +363,10 @@ public class InstallManagerService extends Service { */ private static Apk removeFromActive(String urlString) { Apk apk = ACTIVE_APKS.remove(urlString); - if (apk != null) { - ACTIVE_APPS.remove(apk.packageName); + if (apk == null) { + return new Apk(); } + ACTIVE_APPS.remove(apk.packageName); return apk; }