From 25dd775613c60ddab1bc84123ed87fe243b373f5 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 14 Nov 2023 15:13:45 +0100 Subject: [PATCH] catch illegal argument exception when reading DNS --- src/main/java/de/gultsch/minidns/DNSSocket.java | 5 +++-- .../java/de/gultsch/minidns/NetworkDataSource.java | 11 ++++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/gultsch/minidns/DNSSocket.java b/src/main/java/de/gultsch/minidns/DNSSocket.java index a3403115a..e3d86b80c 100644 --- a/src/main/java/de/gultsch/minidns/DNSSocket.java +++ b/src/main/java/de/gultsch/minidns/DNSSocket.java @@ -126,7 +126,8 @@ final class DNSSocket implements Closeable { sslSocket.setSoTimeout(QUERY_TIMEOUT); sslSocket.startHandshake(); } else { - final SocketAddress socketAddress = new InetSocketAddress(dnsServer.hostname, dnsServer.port); + final SocketAddress socketAddress = + new InetSocketAddress(dnsServer.hostname, dnsServer.port); sslSocket.connect(socketAddress, QUERY_TIMEOUT / 2); sslSocket.setSoTimeout(QUERY_TIMEOUT); sslSocket.startHandshake(); @@ -181,7 +182,7 @@ final class DNSSocket implements Closeable { while (read < length) { read += this.dataInputStream.read(data, read, length - read); } - return new DNSMessage(data); + return NetworkDataSource.readDNSMessage(data); } @Override diff --git a/src/main/java/de/gultsch/minidns/NetworkDataSource.java b/src/main/java/de/gultsch/minidns/NetworkDataSource.java index 93909891d..67a8f8c33 100644 --- a/src/main/java/de/gultsch/minidns/NetworkDataSource.java +++ b/src/main/java/de/gultsch/minidns/NetworkDataSource.java @@ -4,6 +4,7 @@ import android.util.Log; import androidx.annotation.NonNull; +import com.google.common.base.Throwables; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; @@ -125,7 +126,7 @@ public class NetworkDataSource extends DNSDataSource { socket.send(request); final DatagramPacket response = new DatagramPacket(buffer, buffer.length); socket.receive(response); - DNSMessage dnsMessage = new DNSMessage(response.getData()); + final DNSMessage dnsMessage = readDNSMessage(response.getData()); if (dnsMessage.id != message.id) { throw new MiniDNSException.IdMismatch(message, dnsMessage); } @@ -157,4 +158,12 @@ public class NetworkDataSource extends DNSDataSource { } } } + + public static DNSMessage readDNSMessage(final byte[] bytes) throws IOException { + try { + return new DNSMessage(bytes); + } catch (final IllegalArgumentException e) { + throw new IOException(Throwables.getRootCause(e)); + } + } }