From e3dced6eea37c7635220ec6464daf0ca1be4945e Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 12 Apr 2015 16:21:10 +0200 Subject: [PATCH] Fix NPE in Roster if 'from' is null --- .../java/org/jivesoftware/smack/roster/Roster.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java b/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java index cfde00dbe..fc556aa65 100644 --- a/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java +++ b/smack-im/src/main/java/org/jivesoftware/smack/roster/Roster.java @@ -1233,9 +1233,12 @@ public final class Roster extends Manager { final XMPPConnection connection = connection(); Presence presence = (Presence) packet; Jid from = presence.getFrom(); - Resourcepart fromResource = from.getResourceOrNull(); - if (fromResource == null) { - fromResource = Resourcepart.EMPTY; + Resourcepart fromResource = Resourcepart.EMPTY; + if (from != null) { + fromResource = from.getResourceOrNull(); + if (fromResource == null) { + fromResource = Resourcepart.EMPTY; + } } Jid key = getMapKey(from); Map userPresences; @@ -1313,7 +1316,10 @@ public final class Roster extends Manager { // Error presence packets from a bare JID mean we invalidate all existing // presence info for the user. case error: - if (!from.isBareJid()) { + // No need to act on error presences send without from, i.e. + // directly send from the users XMPP service, or where the from + // address is not a bare JID + if (from == null || !from.isBareJid()) { break; } userPresences = getUserPresences(key);