From a61018d62808f8f0dcbc8ed76796360df35bd58c Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Fri, 27 Jan 2012 23:37:57 +0100 Subject: [PATCH] Allow quotes backslashes in names --- label_test.go | 17 +++++++++++++++++ labels.go | 19 +++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-) 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 }