Skip to content

Commit ca96da6

Browse files
mateusz834gopherbot
authored andcommitted
dns/dnsmessage: reject names with dots inside label
Fixes golang/go#56246 Change-Id: I9c8d611d1305536a7510bf6c4a02a5e551aa657a GitHub-Last-Rev: 8a8703a GitHub-Pull-Request: golang#154 Reviewed-on: https://go-review.googlesource.com/c/net/+/443215 TryBot-Result: Gopher Robot <[email protected]> Reviewed-by: Roland Shoemaker <[email protected]> Reviewed-by: Matthew Dempsky <[email protected]> Run-TryBot: Mateusz Poliwczak <[email protected]> Auto-Submit: Roland Shoemaker <[email protected]>
1 parent 056145c commit ca96da6

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

dns/dnsmessage/message.go

+10
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ var (
260260
errReserved = errors.New("segment prefix is reserved")
261261
errTooManyPtr = errors.New("too many pointers (>10)")
262262
errInvalidPtr = errors.New("invalid pointer")
263+
errInvalidName = errors.New("invalid dns name")
263264
errNilResouceBody = errors.New("nil resource body")
264265
errResourceLen = errors.New("insufficient data for resource body length")
265266
errSegTooLong = errors.New("segment length too long")
@@ -2034,6 +2035,15 @@ Loop:
20342035
if endOff > len(msg) {
20352036
return off, errCalcLen
20362037
}
2038+
2039+
// Reject names containing dots.
2040+
// See issue golang/go#56246
2041+
for _, v := range msg[currOff:endOff] {
2042+
if v == '.' {
2043+
return off, errInvalidName
2044+
}
2045+
}
2046+
20372047
name = append(name, msg[currOff:endOff]...)
20382048
name = append(name, '.')
20392049
currOff = endOff

dns/dnsmessage/message_test.go

+9
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,15 @@ func TestName(t *testing.T) {
211211
}
212212
}
213213

214+
func TestNameWithDotsUnpack(t *testing.T) {
215+
name := []byte{3, 'w', '.', 'w', 2, 'g', 'o', 3, 'd', 'e', 'v', 0}
216+
var n Name
217+
_, err := n.unpack(name, 0)
218+
if err != errInvalidName {
219+
t.Fatalf("expected %v, got %v", errInvalidName, err)
220+
}
221+
}
222+
214223
func TestNamePackUnpack(t *testing.T) {
215224
const suffix = ".go.dev."
216225
var longDNSPrefix = strings.Repeat("verylongdomainlabel.", 20)

0 commit comments

Comments
 (0)