catch illegal argument exception when reading DNS
This commit is contained in:
parent
c72a86a0a4
commit
25dd775613
|
@ -126,7 +126,8 @@ final class DNSSocket implements Closeable {
|
||||||
sslSocket.setSoTimeout(QUERY_TIMEOUT);
|
sslSocket.setSoTimeout(QUERY_TIMEOUT);
|
||||||
sslSocket.startHandshake();
|
sslSocket.startHandshake();
|
||||||
} else {
|
} 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.connect(socketAddress, QUERY_TIMEOUT / 2);
|
||||||
sslSocket.setSoTimeout(QUERY_TIMEOUT);
|
sslSocket.setSoTimeout(QUERY_TIMEOUT);
|
||||||
sslSocket.startHandshake();
|
sslSocket.startHandshake();
|
||||||
|
@ -181,7 +182,7 @@ final class DNSSocket implements Closeable {
|
||||||
while (read < length) {
|
while (read < length) {
|
||||||
read += this.dataInputStream.read(data, read, length - read);
|
read += this.dataInputStream.read(data, read, length - read);
|
||||||
}
|
}
|
||||||
return new DNSMessage(data);
|
return NetworkDataSource.readDNSMessage(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -4,6 +4,7 @@ import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import com.google.common.base.Throwables;
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.google.common.cache.CacheLoader;
|
import com.google.common.cache.CacheLoader;
|
||||||
import com.google.common.cache.LoadingCache;
|
import com.google.common.cache.LoadingCache;
|
||||||
|
@ -125,7 +126,7 @@ public class NetworkDataSource extends DNSDataSource {
|
||||||
socket.send(request);
|
socket.send(request);
|
||||||
final DatagramPacket response = new DatagramPacket(buffer, buffer.length);
|
final DatagramPacket response = new DatagramPacket(buffer, buffer.length);
|
||||||
socket.receive(response);
|
socket.receive(response);
|
||||||
DNSMessage dnsMessage = new DNSMessage(response.getData());
|
final DNSMessage dnsMessage = readDNSMessage(response.getData());
|
||||||
if (dnsMessage.id != message.id) {
|
if (dnsMessage.id != message.id) {
|
||||||
throw new MiniDNSException.IdMismatch(message, dnsMessage);
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue