Skip to content

Commit 8663ed5

Browse files
committed
dns/dnsmessage: don't crash with nil resource body
Change-Id: I51969f70d4fc69829fd5a8bcd8a34b3be15b9db0 Reviewed-on: https://go-review.googlesource.com/46930 Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
1 parent 455220f commit 8663ed5

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

dns/dnsmessage/message.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,9 @@ type ResourceBody interface {
280280
}
281281

282282
func (r *Resource) pack(msg []byte, compression map[string]int) ([]byte, error) {
283+
if r.Body == nil {
284+
return msg, &nestedError{"Resource", errors.New("nil resource body")}
285+
}
283286
oldMsg := msg
284287
r.Header.Type = r.Body.realType()
285288
msg, length, err := r.Header.pack(msg, compression)

dns/dnsmessage/message_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,45 @@ func TestBuilder(t *testing.T) {
534534
}
535535
}
536536

537+
func TestResourcePack(t *testing.T) {
538+
for _, m := range []Message{
539+
{
540+
Questions: []Question{
541+
{
542+
Name: mustNewName("."),
543+
Type: TypeAAAA,
544+
Class: ClassINET,
545+
},
546+
},
547+
Answers: []Resource{{ResourceHeader{}, nil}},
548+
},
549+
{
550+
Questions: []Question{
551+
{
552+
Name: mustNewName("."),
553+
Type: TypeAAAA,
554+
Class: ClassINET,
555+
},
556+
},
557+
Authorities: []Resource{{ResourceHeader{}, (*NSResource)(nil)}},
558+
},
559+
{
560+
Questions: []Question{
561+
{
562+
Name: mustNewName("."),
563+
Type: TypeA,
564+
Class: ClassINET,
565+
},
566+
},
567+
Additionals: []Resource{{ResourceHeader{}, nil}},
568+
},
569+
} {
570+
if _, err := m.Pack(); err == nil {
571+
t.Errorf("should fail: %v", m)
572+
}
573+
}
574+
}
575+
537576
func BenchmarkParsing(b *testing.B) {
538577
b.ReportAllocs()
539578

0 commit comments

Comments
 (0)