Browse Source

[app/dns] Add tests for idn support (#2213)

Co-authored-by: kallydev <kallydev@gmail.com>

Co-authored-by: kallydev <kallydev@gmail.com>
Vigilans 2 years ago
parent
commit
32475d9239
2 changed files with 34 additions and 1 deletions
  1. 33 0
      app/dns/dns_test.go
  2. 1 1
      common/strmatcher/matchers.go

+ 33 - 0
app/dns/dns_test.go

@@ -18,6 +18,7 @@ import (
 	"github.com/v2fly/v2ray-core/v5/common"
 	"github.com/v2fly/v2ray-core/v5/common/net"
 	"github.com/v2fly/v2ray-core/v5/common/serial"
+	"github.com/v2fly/v2ray-core/v5/common/strmatcher"
 	feature_dns "github.com/v2fly/v2ray-core/v5/features/dns"
 	"github.com/v2fly/v2ray-core/v5/proxy/freedom"
 	"github.com/v2fly/v2ray-core/v5/testing/servers/udp"
@@ -104,6 +105,16 @@ func (*staticHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
 		case q.Name == "Mijia\\ Cloud." && q.Qtype == dns.TypeA:
 			rr, _ := dns.NewRR("Mijia\\ Cloud. IN A 127.0.0.1")
 			ans.Answer = append(ans.Answer, rr)
+
+		case q.Name == "xn--vi8h.ws." /* 🍕.ws */ && q.Qtype == dns.TypeA:
+			rr, err := dns.NewRR("xn--vi8h.ws. IN A 208.100.42.200")
+			common.Must(err)
+			ans.Answer = append(ans.Answer, rr)
+
+		case q.Name == "xn--l8jaaa.com." /* ああああ.com */ && q.Qtype == dns.TypeA:
+			rr, err := dns.NewRR("xn--l8jaaa.com. IN AAAA a:a:a:a::aaaa")
+			common.Must(err)
+			ans.Answer = append(ans.Answer, rr)
 		}
 	}
 	w.WriteMsg(ans)
@@ -251,6 +262,28 @@ func TestUDPServer(t *testing.T) {
 		}
 	}
 
+	{
+		ips, err := client.LookupIP(common.Must2(strmatcher.ToDomain("🍕.ws")).(string))
+		if err != nil {
+			t.Fatal("unexpected error: ", err)
+		}
+
+		if r := cmp.Diff(ips, []net.IP{{208, 100, 42, 200}}); r != "" {
+			t.Fatal(r)
+		}
+	}
+
+	{
+		ips, err := client.LookupIP(common.Must2(strmatcher.ToDomain("ああああ.com")).(string))
+		if err != nil {
+			t.Fatal("unexpected error: ", err)
+		}
+
+		if r := cmp.Diff(ips, []net.IP{{0, 0xa, 0, 0xa, 0, 0xa, 0, 0xa, 0, 0, 0, 0, 0, 0, 0xaa, 0xaa}}); r != "" {
+			t.Fatal(r)
+		}
+	}
+
 	dnsServer.Shutdown()
 
 	{

+ 1 - 1
common/strmatcher/matchers.go

@@ -176,7 +176,7 @@ func ToDomain(pattern string) (string, error) {
 		}
 		if !isASCII {
 			var err error
-			pattern, err = idna.New().ToASCII(pattern)
+			pattern, err = idna.Punycode.ToASCII(pattern)
 			if err != nil {
 				return "", err
 			}