From 5cb002f69d755d4b812341cbe8063bc462fed2be Mon Sep 17 00:00:00 2001 From: cin <49077173+jimmand@users.noreply.github.com> Date: Sun, 1 Nov 2026 09:37:02 +0300 Subject: [PATCH] fix: crash on WireGuard profiles with empty remote DNS (#6379) When a WireGuard profile has no remote DNS, CoreOutboundBuilder fell back to listOf(WIREGUARD_LOCAL_REMOTE_DNS). The constant is a single comma-separated string, so the core received one list element holding all four addresses and panicked on start: panic: ParseAddr("1.1.1.1,1.0.0.1,2606:4700:4700::1111,..."): unexpected character closes: #6373 --- .../main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt index fb135e57b..9aa8e46b1 100644 --- a/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt +++ b/V2rayNG/app/src/main/java/com/v2ray/ang/core/CoreOutboundBuilder.kt @@ -252,18 +252,21 @@ object CoreOutboundBuilder { ipv4Addresses.ifEmpty { listOf(AppConfig.WIREGUARD_LOCAL_ADDRESS_V4) } } + val defaultDns = AppConfig.WIREGUARD_LOCAL_REMOTE_DNS.split(",").map { it.trim() } + val rawDNS = profileItem.remoteDNS ?.split(",") ?.map { it.trim() } ?.filter { it.isNotEmpty() } ?.ifEmpty { null } - ?: listOf(AppConfig.WIREGUARD_LOCAL_REMOTE_DNS) + ?: defaultDns val remotes = if (MmkvManager.decodeSettingsBool(AppConfig.PREF_IPV6_ENABLED) == true) { rawDNS } else { - val ipv4Dns = rawDNS.filter { !it.contains(":") } - ipv4Dns.ifEmpty { listOf(AppConfig.WIREGUARD_LOCAL_REMOTE_DNS) } + rawDNS.filter { !it.contains(":") } + // falling back to the IPv4 entries of the default list + .ifEmpty { defaultDns.filter { !it.contains(":")} } } outboundBean?.settings?.let { wireguard ->