diff --git a/parse_test.go b/parse_test.go index f24910ba..1ee20a95 100644 --- a/parse_test.go +++ b/parse_test.go @@ -1173,6 +1173,7 @@ func TestTxtLong(t *testing.T) { } } +// Basically, don't crash. func TestMalformedPackets(t *testing.T) { var packets = []string{ "0021641c0000000100000000000078787878787878787878787303636f6d0000100001", @@ -1192,9 +1193,7 @@ func TestMalformedPackets(t *testing.T) { 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"} { + for _, typ := range TypeToString { r, e := NewRR(prefix + typ) if e != nil { t.Log("failure to parse: " + prefix + typ) diff --git a/zscan_rr.go b/zscan_rr.go index 30dbb500..e5bcbfef 100644 --- a/zscan_rr.go +++ b/zscan_rr.go @@ -296,6 +296,9 @@ func setNS(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Ns = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Ns = o return rr, nil @@ -339,6 +342,9 @@ func setNSAPPTR(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Ptr = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Ptr = o return rr, nil @@ -359,6 +365,9 @@ func setRP(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Mbox = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Mbox = o } else { @@ -393,6 +402,9 @@ func setMR(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Mr = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Mr = o return rr, nil @@ -413,6 +425,9 @@ func setMB(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Mb = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Mb = o return rr, nil @@ -433,6 +448,9 @@ func setMG(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Mg = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Mg = o return rr, nil @@ -466,6 +484,9 @@ func setMINFO(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Rmail = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Rmail = o } else { @@ -500,6 +521,9 @@ func setMF(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Mf = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Mf = o return rr, nil @@ -520,6 +544,9 @@ func setMD(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Md = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Md = o return rr, nil @@ -657,6 +684,9 @@ func setCNAME(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Target = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Target = o return rr, nil @@ -677,6 +707,9 @@ func setDNAME(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Target = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Target = o return rr, nil @@ -697,6 +730,9 @@ func setSOA(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.Ns = l.token + if l.length == 0 { + return rr, nil + } <-c // _BLANK if l.token == "@" { rr.Ns = o @@ -901,6 +937,9 @@ func setTALINK(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { l := <-c rr.PreviousName = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.PreviousName = o } else { @@ -1247,6 +1286,9 @@ func setNSEC(h RR_Header, c chan lex, o, f string) (RR, *ParseError, string) { l := <-c rr.NextDomain = l.token + if l.length == 0 { + return rr, nil, l.comment + } if l.token == "@" { rr.NextDomain = o } else { @@ -2004,6 +2046,9 @@ func setLP(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { <-c // _BLANK l = <-c // _STRING rr.Fqdn = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Fqdn = o return rr, nil @@ -2086,6 +2131,9 @@ func setPX(h RR_Header, c chan lex, o, f string) (RR, *ParseError) { <-c // _BLANK l = <-c // _STRING rr.Map822 = l.token + if l.length == 0 { + return rr, nil + } if l.token == "@" { rr.Map822 = o return rr, nil