Skip to content

Commit f9c0264

Browse files
ianlancetaylorgopherbot
authored andcommitted
net: avoid infinite recursion in Windows Resolver.lookupTXT
For #33097 Change-Id: I6138dc844f0b29b01c78a02efc1e1b1ad719b803 Reviewed-on: https://go-review.googlesource.com/c/go/+/412139 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Auto-Submit: Ian Lance Taylor <iant@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com>
1 parent 0dffda1 commit f9c0264

File tree

2 files changed

+49
-35
lines changed

2 files changed

+49
-35
lines changed

src/net/lookup_windows.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ func (r *Resolver) lookupNS(ctx context.Context, name string) ([]*NS, error) {
329329

330330
func (r *Resolver) lookupTXT(ctx context.Context, name string) ([]string, error) {
331331
if r.preferGoOverWindows() {
332-
return r.lookupTXT(ctx, name)
332+
return r.goLookupTXT(ctx, name)
333333
}
334334
// TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this.
335335
acquireThread()

src/net/lookup_windows_test.go

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package net
66

77
import (
88
"bytes"
9+
"context"
910
"encoding/json"
1011
"errors"
1112
"fmt"
@@ -26,104 +27,117 @@ func toJson(v any) string {
2627
return string(data)
2728
}
2829

30+
func testLookup(t *testing.T, fn func(*testing.T, *Resolver, string)) {
31+
for _, def := range []bool{true, false} {
32+
def := def
33+
for _, server := range nslookupTestServers {
34+
server := server
35+
var name string
36+
if def {
37+
name = "default/"
38+
} else {
39+
name = "go/"
40+
}
41+
t.Run(name+server, func(t *testing.T) {
42+
t.Parallel()
43+
r := DefaultResolver
44+
if !def {
45+
r = &Resolver{PreferGo: true}
46+
}
47+
fn(t, r, server)
48+
})
49+
}
50+
}
51+
}
52+
2953
func TestNSLookupMX(t *testing.T) {
3054
testenv.MustHaveExternalNetwork(t)
3155

32-
for _, server := range nslookupTestServers {
33-
mx, err := LookupMX(server)
56+
testLookup(t, func(t *testing.T, r *Resolver, server string) {
57+
mx, err := r.LookupMX(context.Background(), server)
3458
if err != nil {
35-
t.Error(err)
36-
continue
59+
t.Fatal(err)
3760
}
3861
if len(mx) == 0 {
39-
t.Errorf("no results")
40-
continue
62+
t.Fatal("no results")
4163
}
4264
expected, err := nslookupMX(server)
4365
if err != nil {
44-
t.Logf("skipping failed nslookup %s test: %s", server, err)
66+
t.Skipf("skipping failed nslookup %s test: %s", server, err)
4567
}
4668
sort.Sort(byPrefAndHost(expected))
4769
sort.Sort(byPrefAndHost(mx))
4870
if !reflect.DeepEqual(expected, mx) {
4971
t.Errorf("different results %s:\texp:%v\tgot:%v", server, toJson(expected), toJson(mx))
5072
}
51-
}
73+
})
5274
}
5375

5476
func TestNSLookupCNAME(t *testing.T) {
5577
testenv.MustHaveExternalNetwork(t)
5678

57-
for _, server := range nslookupTestServers {
58-
cname, err := LookupCNAME(server)
79+
testLookup(t, func(t *testing.T, r *Resolver, server string) {
80+
cname, err := r.LookupCNAME(context.Background(), server)
5981
if err != nil {
60-
t.Errorf("failed %s: %s", server, err)
61-
continue
82+
t.Fatalf("failed %s: %s", server, err)
6283
}
6384
if cname == "" {
64-
t.Errorf("no result %s", server)
85+
t.Fatalf("no result %s", server)
6586
}
6687
expected, err := nslookupCNAME(server)
6788
if err != nil {
68-
t.Logf("skipping failed nslookup %s test: %s", server, err)
69-
continue
89+
t.Skipf("skipping failed nslookup %s test: %s", server, err)
7090
}
7191
if expected != cname {
7292
t.Errorf("different results %s:\texp:%v\tgot:%v", server, expected, cname)
7393
}
74-
}
94+
})
7595
}
7696

7797
func TestNSLookupNS(t *testing.T) {
7898
testenv.MustHaveExternalNetwork(t)
7999

80-
for _, server := range nslookupTestServers {
81-
ns, err := LookupNS(server)
100+
testLookup(t, func(t *testing.T, r *Resolver, server string) {
101+
ns, err := r.LookupNS(context.Background(), server)
82102
if err != nil {
83-
t.Errorf("failed %s: %s", server, err)
84-
continue
103+
t.Fatalf("failed %s: %s", server, err)
85104
}
86105
if len(ns) == 0 {
87-
t.Errorf("no results")
88-
continue
106+
t.Fatal("no results")
89107
}
90108
expected, err := nslookupNS(server)
91109
if err != nil {
92-
t.Logf("skipping failed nslookup %s test: %s", server, err)
93-
continue
110+
t.Skipf("skipping failed nslookup %s test: %s", server, err)
94111
}
95112
sort.Sort(byHost(expected))
96113
sort.Sort(byHost(ns))
97114
if !reflect.DeepEqual(expected, ns) {
98115
t.Errorf("different results %s:\texp:%v\tgot:%v", toJson(server), toJson(expected), ns)
99116
}
100-
}
117+
})
101118
}
102119

103120
func TestNSLookupTXT(t *testing.T) {
104121
testenv.MustHaveExternalNetwork(t)
105122

106-
for _, server := range nslookupTestServers {
107-
txt, err := LookupTXT(server)
123+
testLookup(t, func(t *testing.T, r *Resolver, server string) {
124+
txt, err := r.LookupTXT(context.Background(), server)
108125
if err != nil {
109-
t.Errorf("failed %s: %s", server, err)
110-
continue
126+
t.Fatalf("failed %s: %s", server, err)
111127
}
112128
if len(txt) == 0 {
113-
t.Errorf("no results")
114-
continue
129+
t.Fatalf("no results")
115130
}
116131
expected, err := nslookupTXT(server)
117132
if err != nil {
118-
t.Logf("skipping failed nslookup %s test: %s", server, err)
119-
continue
133+
t.Skipf("skipping failed nslookup %s test: %s", server, err)
120134
}
121135
sort.Strings(expected)
122136
sort.Strings(txt)
123137
if !reflect.DeepEqual(expected, txt) {
124138
t.Errorf("different results %s:\texp:%v\tgot:%v", server, toJson(expected), toJson(txt))
125139
}
126-
}
140+
})
127141
}
128142

129143
func TestLookupLocalPTR(t *testing.T) {

0 commit comments

Comments
 (0)