From 0f8bd01aadaf6a54528698cba5abadd12ebeafad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=89=E5=AE=B9?= Date: Sat, 26 Apr 2025 14:03:51 +0800 Subject: [PATCH] Report invalid DNS address early --- dns/transport/https.go | 4 +++- dns/transport/quic/http3.go | 4 +++- dns/transport/quic/quic.go | 5 ++++- dns/transport/tcp.go | 5 ++++- dns/transport/tls.go | 4 +++- dns/transport/udp.go | 5 ++++- 6 files changed, 21 insertions(+), 6 deletions(-) diff --git a/dns/transport/https.go b/dns/transport/https.go index 1750fd26..6e71dae1 100644 --- a/dns/transport/https.go +++ b/dns/transport/https.go @@ -93,7 +93,9 @@ func NewHTTPS(ctx context.Context, logger log.ContextLogger, tag string, options return nil, err } serverAddr := options.DNSServerAddressOptions.Build() - if serverAddr.Port == 0 { + if !serverAddr.Addr.IsValid() { + return nil, E.New("invalid server address: ", serverAddr) + } else if serverAddr.Port == 0 { serverAddr.Port = 443 } return NewHTTPSRaw( diff --git a/dns/transport/quic/http3.go b/dns/transport/quic/http3.go index 0d871741..6d796576 100644 --- a/dns/transport/quic/http3.go +++ b/dns/transport/quic/http3.go @@ -89,7 +89,9 @@ func NewHTTP3(ctx context.Context, logger log.ContextLogger, tag string, options return nil, err } serverAddr := options.DNSServerAddressOptions.Build() - if serverAddr.Port == 0 { + if !serverAddr.Addr.IsValid() { + return nil, E.New("invalid server address: ", serverAddr) + } else if serverAddr.Port == 0 { serverAddr.Port = 443 } return &HTTP3Transport{ diff --git a/dns/transport/quic/quic.go b/dns/transport/quic/quic.go index 18f8b9fe..f48412a4 100644 --- a/dns/transport/quic/quic.go +++ b/dns/transport/quic/quic.go @@ -16,6 +16,7 @@ import ( sQUIC "github.com/sagernet/sing-quic" "github.com/sagernet/sing/common" "github.com/sagernet/sing/common/bufio" + E "github.com/sagernet/sing/common/exceptions" "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -55,7 +56,9 @@ func NewQUIC(ctx context.Context, logger log.ContextLogger, tag string, options tlsConfig.SetNextProtos([]string{"doq"}) } serverAddr := options.DNSServerAddressOptions.Build() - if serverAddr.Port == 0 { + if !serverAddr.Addr.IsValid() { + return nil, E.New("invalid server address: ", serverAddr) + } else if serverAddr.Port == 0 { serverAddr.Port = 853 } return &Transport{ diff --git a/dns/transport/tcp.go b/dns/transport/tcp.go index a814c030..3277c36d 100644 --- a/dns/transport/tcp.go +++ b/dns/transport/tcp.go @@ -13,6 +13,7 @@ import ( "github.com/sagernet/sing-box/option" "github.com/sagernet/sing/common" "github.com/sagernet/sing/common/buf" + E "github.com/sagernet/sing/common/exceptions" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -37,7 +38,9 @@ func NewTCP(ctx context.Context, logger log.ContextLogger, tag string, options o return nil, err } serverAddr := options.DNSServerAddressOptions.Build() - if serverAddr.Port == 0 { + if !serverAddr.Addr.IsValid() { + return nil, E.New("invalid server address: ", serverAddr) + } else if serverAddr.Port == 0 { serverAddr.Port = 53 } return &TCPTransport{ diff --git a/dns/transport/tls.go b/dns/transport/tls.go index a99bf2f7..a584bff8 100644 --- a/dns/transport/tls.go +++ b/dns/transport/tls.go @@ -54,7 +54,9 @@ func NewTLS(ctx context.Context, logger log.ContextLogger, tag string, options o return nil, err } serverAddr := options.DNSServerAddressOptions.Build() - if serverAddr.Port == 0 { + if !serverAddr.Addr.IsValid() { + return nil, E.New("invalid server address: ", serverAddr) + } else if serverAddr.Port == 0 { serverAddr.Port = 853 } return &TLSTransport{ diff --git a/dns/transport/udp.go b/dns/transport/udp.go index e2ad9db7..d43bc21f 100644 --- a/dns/transport/udp.go +++ b/dns/transport/udp.go @@ -13,6 +13,7 @@ import ( "github.com/sagernet/sing-box/log" "github.com/sagernet/sing-box/option" "github.com/sagernet/sing/common/buf" + E "github.com/sagernet/sing/common/exceptions" "github.com/sagernet/sing/common/logger" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -44,7 +45,9 @@ func NewUDP(ctx context.Context, logger log.ContextLogger, tag string, options o return nil, err } serverAddr := options.DNSServerAddressOptions.Build() - if serverAddr.Port == 0 { + if !serverAddr.Addr.IsValid() { + return nil, E.New("invalid server address: ", serverAddr) + } else if serverAddr.Port == 0 { serverAddr.Port = 53 } return NewUDPRaw(logger, dns.NewTransportAdapterWithRemoteOptions(C.DNSTypeUDP, tag, options), transportDialer, serverAddr), nil