Fixed crash when HTTPS response is not correct
This commit is contained in:
parent
1feb5a0074
commit
e178184df9
@ -43,7 +43,7 @@ Supported DNS Query Methods:
|
|||||||
* UDP
|
* UDP
|
||||||
* TCP
|
* TCP
|
||||||
* DNS over TLS ([RFC7858](https://tools.ietf.org/html/rfc7858))
|
* DNS over TLS ([RFC7858](https://tools.ietf.org/html/rfc7858))
|
||||||
* DNS over HTTPS ([IETF darft](https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-11))
|
* DNS over HTTPS ([IETF darft](https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-12))
|
||||||
* DNS over HTTPS ([Google JSON](https://developers.google.com/speed/public-dns/docs/dns-over-https))
|
* DNS over HTTPS ([Google JSON](https://developers.google.com/speed/public-dns/docs/dns-over-https))
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
|
@ -65,11 +65,14 @@ public class HttpsIetfProvider extends HttpsProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call call, Response response) throws IOException {
|
public void onResponse(Call call, Response response) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
result = new DnsMessage(response.body().bytes()).asBuilder()
|
try {
|
||||||
.setId(id).build().toArray();
|
result = new DnsMessage(response.body().bytes()).asBuilder()
|
||||||
completed = true;
|
.setId(id).build().toArray();
|
||||||
|
completed = true;
|
||||||
|
} catch (Exception ignored) {//throw IllegalArgumentException when response is not correct
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -72,64 +72,67 @@ public class HttpsJsonProvider extends HttpsProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(Call call, Response response) throws IOException {
|
public void onResponse(Call call, Response response) {
|
||||||
if (response.isSuccessful()) {
|
if (response.isSuccessful()) {
|
||||||
JsonObject jsonObject = new JsonParser().parse(response.body().string()).getAsJsonObject();
|
try {
|
||||||
DnsMessage.Builder msg = message.asBuilder()
|
JsonObject jsonObject = new JsonParser().parse(response.body().string()).getAsJsonObject();
|
||||||
.setRecursionDesired(jsonObject.get("RD").getAsBoolean())
|
DnsMessage.Builder msg = message.asBuilder()
|
||||||
.setRecursionAvailable(jsonObject.get("RA").getAsBoolean())
|
.setRecursionDesired(jsonObject.get("RD").getAsBoolean())
|
||||||
.setAuthenticData(jsonObject.get("AD").getAsBoolean())
|
.setRecursionAvailable(jsonObject.get("RA").getAsBoolean())
|
||||||
.setCheckingDisabled(jsonObject.get("CD").getAsBoolean());
|
.setAuthenticData(jsonObject.get("AD").getAsBoolean())
|
||||||
if (jsonObject.has("Answer")) {
|
.setCheckingDisabled(jsonObject.get("CD").getAsBoolean());
|
||||||
JsonArray answers = jsonObject.get("Answer").getAsJsonArray();
|
if (jsonObject.has("Answer")) {
|
||||||
for (JsonElement answer : answers) {
|
JsonArray answers = jsonObject.get("Answer").getAsJsonArray();
|
||||||
JsonObject ans = answer.getAsJsonObject();
|
for (JsonElement answer : answers) {
|
||||||
Record.TYPE type = Record.TYPE.getType(ans.get("type").getAsInt());
|
JsonObject ans = answer.getAsJsonObject();
|
||||||
String data = ans.get("data").getAsString();
|
Record.TYPE type = Record.TYPE.getType(ans.get("type").getAsInt());
|
||||||
Data recordData = null;
|
String data = ans.get("data").getAsString();
|
||||||
switch (type) {
|
Data recordData = null;
|
||||||
case A:
|
switch (type) {
|
||||||
recordData = new A(data);
|
case A:
|
||||||
break;
|
recordData = new A(data);
|
||||||
case AAAA:
|
break;
|
||||||
recordData = new AAAA(data);
|
case AAAA:
|
||||||
break;
|
recordData = new AAAA(data);
|
||||||
case CNAME:
|
break;
|
||||||
recordData = new CNAME(data);
|
case CNAME:
|
||||||
break;
|
recordData = new CNAME(data);
|
||||||
case MX:
|
break;
|
||||||
recordData = new MX(5, data);
|
case MX:
|
||||||
break;
|
recordData = new MX(5, data);
|
||||||
case SOA:
|
break;
|
||||||
String[] sections = data.split(" ");
|
case SOA:
|
||||||
if (sections.length == 7) {
|
String[] sections = data.split(" ");
|
||||||
recordData = new SOA(sections[0], sections[1],
|
if (sections.length == 7) {
|
||||||
Long.valueOf(sections[2]), Integer.valueOf(sections[3]),
|
recordData = new SOA(sections[0], sections[1],
|
||||||
Integer.valueOf(sections[4]), Integer.valueOf(sections[5]),
|
Long.valueOf(sections[2]), Integer.valueOf(sections[3]),
|
||||||
Long.valueOf(sections[6]));
|
Integer.valueOf(sections[4]), Integer.valueOf(sections[5]),
|
||||||
}
|
Long.valueOf(sections[6]));
|
||||||
break;
|
}
|
||||||
case DNAME:
|
break;
|
||||||
recordData = new DNAME(data);
|
case DNAME:
|
||||||
break;
|
recordData = new DNAME(data);
|
||||||
case NS:
|
break;
|
||||||
recordData = new NS(DnsName.from(data));
|
case NS:
|
||||||
break;
|
recordData = new NS(DnsName.from(data));
|
||||||
case TXT:
|
break;
|
||||||
recordData = new TXT(data.getBytes());
|
case TXT:
|
||||||
break;
|
recordData = new TXT(data.getBytes());
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
if (recordData != null) {
|
if (recordData != null) {
|
||||||
msg.addAnswer(new Record<>(ans.get("name").getAsString(),
|
msg.addAnswer(new Record<>(ans.get("name").getAsString(),
|
||||||
type, 1,
|
type, 1,
|
||||||
ans.get("TTL").getAsLong(),
|
ans.get("TTL").getAsLong(),
|
||||||
recordData));
|
recordData));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
result = msg.setQrFlag(true).build().toArray();
|
||||||
|
completed = true;
|
||||||
|
} catch (Exception ignored) {//throw com.google.gson.JsonSyntaxException when response is not correct
|
||||||
}
|
}
|
||||||
result = msg.setQrFlag(true).build().toArray();
|
|
||||||
completed = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user