From c4228e072b7bcbc93d16cbd0b92577044cc3f22b Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 14 Nov 2020 12:44:42 +0100 Subject: [PATCH 1/2] [tcp] Add missing null check in resolveDomain() The method lookupHostAddress() returns null in case of an error, hence we need to test if the returned value is null prior adding the endpoint. Should fix the following NPE: java.lang.NullPointerException: at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration (XMPPTCPConnection.java:606) at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal (XMPPTCPConnection.java:846) at org.jivesoftware.smack.AbstractXMPPConnection.connect (AbstractXMPPConnection.java:530) at org.jivesoftware.smack.ReconnectionManager$2.run (ReconnectionManager.java:282) at java.lang.Thread.run (Thread.java:784) Reported-by: Eng ChongMeng --- .../smack/tcp/rce/RemoteXmppTcpConnectionEndpoints.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/RemoteXmppTcpConnectionEndpoints.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/RemoteXmppTcpConnectionEndpoints.java index 6b7da5ccf..71187155b 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/RemoteXmppTcpConnectionEndpoints.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/RemoteXmppTcpConnectionEndpoints.java @@ -192,8 +192,10 @@ public class RemoteXmppTcpConnectionEndpoints { for (SRV srv : sortedSrvRecords) { List targetInetAddresses = dnsResolver.lookupHostAddress(srv.target, lookupFailures, dnssecMode); - SrvXmppRemoteConnectionEndpoint endpoint = new SrvXmppRemoteConnectionEndpoint(srv, targetInetAddresses); - endpoints.add(endpoint); + if (targetInetAddresses != null) { + SrvXmppRemoteConnectionEndpoint endpoint = new SrvXmppRemoteConnectionEndpoint(srv, targetInetAddresses); + endpoints.add(endpoint); + } } } else { LOGGER.info("Could not resolve DNS SRV resource records for " + srvDomain + ". Consider adding those."); From f10cbb4a97a253410394b5d88badd9479d9f3b73 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 14 Nov 2020 12:41:58 +0100 Subject: [PATCH 2/2] [core] Add requireNonNull() check to some connection endpoints --- .../smack/tcp/rce/IpTcpRemoteConnectionEndpoint.java | 7 ++++--- .../smack/tcp/rce/SrvRemoteConnectionEndpoint.java | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/IpTcpRemoteConnectionEndpoint.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/IpTcpRemoteConnectionEndpoint.java index 5f6a23ad5..63a97230f 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/IpTcpRemoteConnectionEndpoint.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/IpTcpRemoteConnectionEndpoint.java @@ -19,6 +19,7 @@ package org.jivesoftware.smack.tcp.rce; import java.net.InetAddress; import org.jivesoftware.smack.datatypes.UInt16; +import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.rce.SingleAddressRemoteConnectionEndpoint; import org.minidns.record.InternetAddressRR; @@ -33,9 +34,9 @@ public final class IpTcpRemoteConnectionEndpoint> from(CharSequence host, UInt16 port, diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/SrvRemoteConnectionEndpoint.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/SrvRemoteConnectionEndpoint.java index 980a2396e..7b4a3b984 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/SrvRemoteConnectionEndpoint.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/rce/SrvRemoteConnectionEndpoint.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.List; import org.jivesoftware.smack.datatypes.UInt16; +import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.rce.RemoteConnectionEndpoint; import org.minidns.record.SRV; @@ -36,7 +37,7 @@ public abstract class SrvRemoteConnectionEndpoint implements RemoteConnectionEnd protected SrvRemoteConnectionEndpoint(SRV srv, List inetAddresses) { this.srv = srv; this.port = UInt16.from(srv.port); - this.inetAddresses = inetAddresses; + this.inetAddresses = Objects.requireNonNull(inetAddresses); } @Override