diff --git a/label_test.go b/label_test.go index 7d10ac80..66dad89d 100644 --- a/label_test.go +++ b/label_test.go @@ -1,6 +1,7 @@ package dns import ( + "fmt" "testing" ) @@ -28,3 +29,19 @@ func TestCompareLabels(t *testing.T) { t.Fail() } } + +func TestSplitLabels(t *testing.T) { + s1 := "www.miek.nl." + s2 := "www.miek.nl" + s3 := `www\.miek.nl.` + s4 := `www\\.miek.nl.` + + println(len(SplitLabels(s1))) + fmt.Printf("%v\n", SplitLabels(s1)) + println(len(SplitLabels(s2))) + fmt.Printf("%v\n", SplitLabels(s2)) + println(len(SplitLabels(s3))) + fmt.Printf("%v\n", SplitLabels(s3)) + println(len(SplitLabels(s4))) + fmt.Printf("%v\n", SplitLabels(s4)) +} diff --git a/labels.go b/labels.go index 1554c677..7db702a6 100644 --- a/labels.go +++ b/labels.go @@ -4,25 +4,24 @@ package dns // SplitLabels splits a domainname string into its labels. func SplitLabels(s string) []string { - last := byte('.') k := 0 labels := make([]string, 0) - escape := false + last := byte('.') + lastlast := byte('.') s = Fqdn(s) // Make fully qualified for i := 0; i < len(s); i++ { - escape = false - if s[i] == '\\' { - escape = true - } if s[i] == '.' { - if last == '\\' && !escape { - // do nothing - break + if last == '\\' { + if lastlast != '\\' { + // do nothing + continue + } } labels = append(labels, s[k:i]) k = i + 1 // + dot } - last = s[i] + lastlast = last + last = s[i] } return labels }