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)
This commit is contained in:
Hans-Christoph Steiner 2016-06-14 12:34:10 +02:00
parent caec0c3eaa
commit 558c0a3e0e

View File

@ -363,9 +363,10 @@ public class InstallManagerService extends Service {
*/ */
private static Apk removeFromActive(String urlString) { private static Apk removeFromActive(String urlString) {
Apk apk = ACTIVE_APKS.remove(urlString); Apk apk = ACTIVE_APKS.remove(urlString);
if (apk != null) { if (apk == null) {
ACTIVE_APPS.remove(apk.packageName); return new Apk();
} }
ACTIVE_APPS.remove(apk.packageName);
return apk; return apk;
} }