Fix NPE in Roster if 'from' is null

This commit is contained in:
Florian Schmaus 2015-04-12 16:21:10 +02:00
parent a53894a65b
commit e3dced6eea
1 changed files with 10 additions and 4 deletions

View File

@ -1233,9 +1233,12 @@ public final class Roster extends Manager {
final XMPPConnection connection = connection(); final XMPPConnection connection = connection();
Presence presence = (Presence) packet; Presence presence = (Presence) packet;
Jid from = presence.getFrom(); Jid from = presence.getFrom();
Resourcepart fromResource = from.getResourceOrNull(); Resourcepart fromResource = Resourcepart.EMPTY;
if (fromResource == null) { if (from != null) {
fromResource = Resourcepart.EMPTY; fromResource = from.getResourceOrNull();
if (fromResource == null) {
fromResource = Resourcepart.EMPTY;
}
} }
Jid key = getMapKey(from); Jid key = getMapKey(from);
Map<Resourcepart, Presence> userPresences; Map<Resourcepart, Presence> userPresences;
@ -1313,7 +1316,10 @@ public final class Roster extends Manager {
// Error presence packets from a bare JID mean we invalidate all existing // Error presence packets from a bare JID mean we invalidate all existing
// presence info for the user. // presence info for the user.
case error: 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; break;
} }
userPresences = getUserPresences(key); userPresences = getUserPresences(key);