From 52c87f43fe1f42ad98285b7c101c6af19d5a3a7f Mon Sep 17 00:00:00 2001 From: Mygod Date: Sun, 19 Jan 2020 15:24:17 +0800 Subject: [PATCH] Ensure hosts results are used Fixes #2412. --- .../src/main/java/com/github/shadowsocks/net/HostsFile.kt | 8 +------- .../java/com/github/shadowsocks/net/LocalDnsServer.kt | 6 ++++-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/github/shadowsocks/net/HostsFile.kt b/core/src/main/java/com/github/shadowsocks/net/HostsFile.kt index c6c03951a7..e8011d06d5 100644 --- a/core/src/main/java/com/github/shadowsocks/net/HostsFile.kt +++ b/core/src/main/java/com/github/shadowsocks/net/HostsFile.kt @@ -21,8 +21,6 @@ package com.github.shadowsocks.net import com.github.shadowsocks.utils.parseNumericAddress -import java.net.Inet4Address -import java.net.Inet6Address import java.net.InetAddress class HostsFile(input: String = "") { @@ -36,9 +34,5 @@ class HostsFile(input: String = "") { } val configuredHostnames get() = map.size - fun resolve(hostname: String, isIpv6: Boolean): List { - return (map[hostname] ?: return emptyList()).run { - if (isIpv6) filterIsInstance() else filterIsInstance() - }.shuffled() - } + fun resolve(hostname: String) = map[hostname] ?: emptyList() } diff --git a/core/src/main/java/com/github/shadowsocks/net/LocalDnsServer.kt b/core/src/main/java/com/github/shadowsocks/net/LocalDnsServer.kt index 3459820ec9..4c8e7b354f 100644 --- a/core/src/main/java/com/github/shadowsocks/net/LocalDnsServer.kt +++ b/core/src/main/java/com/github/shadowsocks/net/LocalDnsServer.kt @@ -124,10 +124,12 @@ class LocalDnsServer(private val localResolver: suspend (String) -> Array return@supervisorScope remote.await() } val host = question.name.canonicalize().toString(true) - val hostsResults = hosts.resolve(host, isIpv6) + val hostsResults = hosts.resolve(host) if (hostsResults.isNotEmpty()) { remote.cancel() - return@supervisorScope cookDnsResponse(request, hostsResults) + return@supervisorScope cookDnsResponse(request, hostsResults.run { + if (isIpv6) filterIsInstance() else filterIsInstance() + }.shuffled()) } val acl = acl?.await() ?: return@supervisorScope remote.await() val useLocal = when (acl.shouldBypass(host)) {