From 443f6441fbe9a5f2acea8b6f9a93b67dcb6d2d8f Mon Sep 17 00:00:00 2001 From: Sergey Ponomarev Date: Sat, 20 Sep 2025 11:26:59 +0300 Subject: [PATCH] SPARK-2349: fix NPE when adding yourself to contact list In this case you'll get the presence from PresenceManager constants that doesn't have the from field. This make a two NPEs. --- .../main/java/org/jivesoftware/spark/ui/ContactList.java | 3 +++ .../sparkimpl/plugin/gateways/GatewayPlugin.java | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/jivesoftware/spark/ui/ContactList.java b/core/src/main/java/org/jivesoftware/spark/ui/ContactList.java index 34f06c7e..2d99de1b 100644 --- a/core/src/main/java/org/jivesoftware/spark/ui/ContactList.java +++ b/core/src/main/java/org/jivesoftware/spark/ui/ContactList.java @@ -316,6 +316,9 @@ public class ContactList extends JPanel implements ActionListener, // We ignore this. return; } + if (presence.getFrom() == null) { + return; + } final Roster roster = Roster.getInstanceFor(SparkManager.getConnection()); diff --git a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/gateways/GatewayPlugin.java b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/gateways/GatewayPlugin.java index 1cea642c..f5a4584f 100644 --- a/core/src/main/java/org/jivesoftware/sparkimpl/plugin/gateways/GatewayPlugin.java +++ b/core/src/main/java/org/jivesoftware/sparkimpl/plugin/gateways/GatewayPlugin.java @@ -41,6 +41,7 @@ import org.jivesoftware.sparkimpl.settings.local.LocalPreferences; import org.jivesoftware.sparkimpl.settings.local.SettingsManager; import org.jxmpp.jid.BareJid; import org.jxmpp.jid.DomainBareJid; +import org.jxmpp.jid.Jid; import javax.swing.*; @@ -285,7 +286,11 @@ public class GatewayPlugin implements Plugin, ContactItemHandler { @Override public boolean handlePresence(ContactItem item, Presence presence) { if (presence.isAvailable()) { - DomainBareJid domain = presence.getFrom().asDomainBareJid(); + Jid from = presence.getFrom(); + if (from == null) { + return false; + } + DomainBareJid domain = from.asDomainBareJid(); Transport transport = TransportUtils.getTransport(domain); if (transport != null) { if (presence.getType() == Presence.Type.available) {