diff --git a/format.go b/format.go index 86057f99..0ec79f2f 100644 --- a/format.go +++ b/format.go @@ -31,6 +31,9 @@ func Field(r RR, i int) string { switch reflect.ValueOf(r).Elem().Type().Field(i).Tag { case `dns:"a"`: // TODO(miek): Hmm store this as 16 bytes + if d.Len() < net.IPv4len { + return "" + } if d.Len() < net.IPv6len { return net.IPv4(byte(d.Index(0).Uint()), byte(d.Index(1).Uint()), @@ -42,6 +45,9 @@ func Field(r RR, i int) string { byte(d.Index(14).Uint()), byte(d.Index(15).Uint())).String() case `dns:"aaaa"`: + if d.Len() < net.IPv6len { + return "" + } return net.IP{ byte(d.Index(0).Uint()), byte(d.Index(1).Uint()), diff --git a/format_test.go b/format_test.go new file mode 100644 index 00000000..d0dce4ff --- /dev/null +++ b/format_test.go @@ -0,0 +1,16 @@ +package dns + +import ( + "testing" +) + +func TestFieldEmptyAOrAAAAData(t *testing.T) { + res := Field(new(A), 1) + if res != "" { + t.Errorf("expected empty string but got %v", res) + } + res = Field(new(AAAA), 1) + if res != "" { + t.Errorf("expected empty string but got %v", res) + } +}