From cfa561ed85aed2cfb52b5d9c6aacfeccde4fe6bc Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Fri, 29 Aug 2014 09:42:43 +0000 Subject: [PATCH] Add TestDynamicUpdateParsing test --- parse_test.go | 15 +++++++++++++++ zscan_rr.go | 9 +++++++++ 2 files changed, 24 insertions(+) diff --git a/parse_test.go b/parse_test.go index 12de8224..9e7f593a 100644 --- a/parse_test.go +++ b/parse_test.go @@ -1160,3 +1160,18 @@ func TestMalformedPackets(t *testing.T) { // println(msg.String()) } } + +func TestDynamicUpdateParsing(t *testing.T) { + prefix := "example.com. IN " + // TODO(miek): extend to all types. + //for _, typ := range TypeToString { + for _, typ := range []string{"PTR", "A"} { + r, e := NewRR(prefix + typ) + if e != nil { + t.Log("failure to parse: " + prefix + typ) + t.Fail() + } else { + t.Logf("parsed: %s", r.String()) + } + } +} diff --git a/zscan_rr.go b/zscan_rr.go index dc553855..9949a4be 100644 --- a/zscan_rr.go +++ b/zscan_rr.go @@ -265,6 +265,9 @@ func setA(h RR_Header, c chan lex, f string) (RR, *ParseError) { rr.Hdr = h l := <-c + if l.length == 0 { // Dynamic updates. + return rr, nil + } rr.A = net.ParseIP(l.token) if rr.A == nil { return nil, &ParseError{f, "bad A A", l} @@ -277,6 +280,9 @@ func setAAAA(h RR_Header, c chan lex, f string) (RR, *ParseError) { rr.Hdr = h l := <-c + if l.length == 0 { + return rr, nil + } rr.AAAA = net.ParseIP(l.token) if rr.AAAA == nil { return nil, &ParseError{f, "bad AAAA AAAA", l} @@ -310,6 +316,9 @@ func setPTR(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Ptr = l.token + if l.length == 0 { // dynamic update rr. + return rr, nil + } if l.token == "@" { rr.Ptr = o return rr, nil