From 289976667d9ae540e3bb32b7e78410199fa483c6 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 16 May 2019 17:51:36 +0200 Subject: [PATCH] fix NullPointerException in BonjourPeer and BluetoothPeer java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.Worker thread. at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:62) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6128) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at org.fdroid.fdroid.localrepo.peers.BonjourPeer.equals(BonjourPeer.java:34) at java.util.HashMap.put(HashMap.java:427) at java.util.HashSet.add(HashSet.java:217) at rx.internal.operators.OperatorDistinct$1.onNext(OperatorDistinct.java:62) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.pollQueue(OperatorObserveOn.java:202) at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber$2.call(OperatorObserveOn.java:162) at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) --- .../org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java | 9 ++++----- .../org/fdroid/fdroid/localrepo/peers/BonjourPeer.java | 5 +++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java b/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java index 5cc75f8b8..c1a2c1a9b 100644 --- a/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java +++ b/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BluetoothPeer.java @@ -2,7 +2,7 @@ package org.fdroid.fdroid.localrepo.peers; import android.bluetooth.BluetoothDevice; import android.os.Parcel; - +import android.text.TextUtils; import org.fdroid.fdroid.R; import org.fdroid.fdroid.localrepo.type.BluetoothSwap; @@ -31,9 +31,8 @@ public class BluetoothPeer implements Peer { @Override public boolean equals(Object peer) { - return peer != null - && peer instanceof BluetoothPeer - && ((BluetoothPeer) peer).device.getAddress().equals(device.getAddress()); + return peer instanceof BluetoothPeer + && TextUtils.equals(((BluetoothPeer) peer).device.getAddress(), device.getAddress()); } @Override @@ -48,7 +47,7 @@ public class BluetoothPeer implements Peer { /** * Return the fingerprint of the signing key, or {@code null} if it is not set. - * + *

* This is not yet stored for Bluetooth connections. Once a device is connected to a bluetooth * socket, if we trust it enough to accept a fingerprint from it somehow, then we may as well * trust it enough to receive an index from it that contains a fingerprint we can use. diff --git a/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java b/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java index 0552ebf67..3c25169a9 100644 --- a/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java +++ b/app/src/full/java/org/fdroid/fdroid/localrepo/peers/BonjourPeer.java @@ -2,6 +2,7 @@ package org.fdroid.fdroid.localrepo.peers; import android.net.Uri; import android.os.Parcel; +import android.text.TextUtils; import javax.jmdns.ServiceInfo; import javax.jmdns.impl.FDroidServiceInfo; @@ -29,9 +30,9 @@ public class BonjourPeer extends WifiPeer { @Override public boolean equals(Object peer) { - if (peer != null && peer instanceof BonjourPeer) { + if (peer instanceof BonjourPeer) { BonjourPeer that = (BonjourPeer) peer; - return this.getFingerprint().equals(that.getFingerprint()); + return TextUtils.equals(this.getFingerprint(), that.getFingerprint()); } return false; }