Skip to content

Commit cc155eb

Browse files
iangudgerbradfitz
authored andcommitted
vendor: update golang.org/x/net/dns/dnsmessage from upstream
Updates to x/net git rev 24dd378 for CL 100055 Fixes #10622 Updates #16218 Change-Id: I99e26da7b908b36585a0379d9381030c01819b54 Reviewed-on: https://go-review.googlesource.com/101278 Run-TryBot: Ian Gudger <igudger@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
1 parent 718d6c5 commit cc155eb

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/vendor/golang_org/x/net/dns/dnsmessage/message.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ var (
9191
errTooManyAdditionals = errors.New("too many Additionals to pack (>65535)")
9292
errNonCanonicalName = errors.New("name is not in canonical format (it must end with a .)")
9393
errStringTooLong = errors.New("character string exceeds maximum length (255)")
94+
errCompressedSRV = errors.New("compressed name in SRV resource data")
9495
)
9596

9697
// Internal constants.
@@ -1610,6 +1611,10 @@ func (n *Name) pack(msg []byte, compression map[string]int, compressionOff int)
16101611

16111612
// unpack unpacks a domain name.
16121613
func (n *Name) unpack(msg []byte, off int) (int, error) {
1614+
return n.unpackCompressed(msg, off, true /* allowCompression */)
1615+
}
1616+
1617+
func (n *Name) unpackCompressed(msg []byte, off int, allowCompression bool) (int, error) {
16131618
// currOff is the current working offset.
16141619
currOff := off
16151620

@@ -1645,6 +1650,9 @@ Loop:
16451650
name = append(name, '.')
16461651
currOff = endOff
16471652
case 0xC0: // Pointer
1653+
if !allowCompression {
1654+
return off, errCompressedSRV
1655+
}
16481656
if currOff >= len(msg) {
16491657
return off, errInvalidPtr
16501658
}
@@ -2044,7 +2052,7 @@ func unpackSRVResource(msg []byte, off int) (SRVResource, error) {
20442052
return SRVResource{}, &nestedError{"Port", err}
20452053
}
20462054
var target Name
2047-
if _, err := target.unpack(msg, off); err != nil {
2055+
if _, err := target.unpackCompressed(msg, off, false /* allowCompression */); err != nil {
20482056
return SRVResource{}, &nestedError{"Target", err}
20492057
}
20502058
return SRVResource{priority, weight, port, target}, nil

src/vendor/golang_org/x/net/dns/dnsmessage/message_test.go

+22
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,28 @@ func TestNamePackUnpack(t *testing.T) {
158158
}
159159
}
160160

161+
func TestIncompressibleName(t *testing.T) {
162+
name := mustNewName("example.com.")
163+
compression := map[string]int{}
164+
buf, err := name.pack(make([]byte, 0, 100), compression, 0)
165+
if err != nil {
166+
t.Fatal("First packing failed:", err)
167+
}
168+
buf, err = name.pack(buf, compression, 0)
169+
if err != nil {
170+
t.Fatal("Second packing failed:", err)
171+
}
172+
var n1 Name
173+
off, err := n1.unpackCompressed(buf, 0, false /* allowCompression */)
174+
if err != nil {
175+
t.Fatal("Unpacking incompressible name without pointers failed:", err)
176+
}
177+
var n2 Name
178+
if _, err := n2.unpackCompressed(buf, off, false /* allowCompression */); err != errCompressedSRV {
179+
t.Errorf("Unpacking compressed incompressible name with pointers: got err = %v, want = %v", err, errCompressedSRV)
180+
}
181+
}
182+
161183
func checkErrorPrefix(err error, prefix string) bool {
162184
e, ok := err.(*nestedError)
163185
return ok && e.s == prefix

0 commit comments

Comments
 (0)