From 82cfe822ff1265512935f06a94b74dd13e0f9a16 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Wed, 10 Oct 2012 12:39:45 +0200 Subject: [PATCH] Make toRadixName much faster fix bug when a escape is escaped: \\. This last dot is now a real domain label seperator dot. --- zone.go | 19 +++++++++++++++---- zone_test.go | 7 +++++-- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/zone.go b/zone.go index b007ad52..00672dda 100644 --- a/zone.go +++ b/zone.go @@ -109,17 +109,28 @@ func NewZoneData(s string) *ZoneData { // we preserve the nsec ordering of the zone (this idea was stolen from NSD). // Each label is also lowercased. The name given must be fully qualified. func toRadixName(d string) string { - if d == "." { + if d == "" || d == "." { return "." } s := "" + ld := len(d) + if d[ld-1] != '.' { + d = d + "." + ld++ + } var lastdot int var lastbyte byte var lastlastbyte byte for i := 0; i < len(d); i++ { - if d[i] == '.' && lastbyte != '\\' && lastlastbyte != '\\' { - s = d[lastdot:i] + "." + s - lastdot = i+1 + if d[i] == '.' { + switch { + case lastbyte != '\\': + fallthrough + case lastbyte == '\\' && lastlastbyte == '\\': + s = d[lastdot:i] + "." + s + lastdot = i + 1 + continue + } } lastlastbyte = lastbyte lastbyte = d[i] diff --git a/zone_test.go b/zone_test.go index c2306a24..7f15a6a5 100644 --- a/zone_test.go +++ b/zone_test.go @@ -7,9 +7,12 @@ import ( func TestRadixName(t *testing.T) { tests := map[string]string{".": ".", "www.miek.nl.": ".nl.miek.www", - "miek.nl.": ".nl.miek", - "mi\\.ek.nl.": ".nl.mi\\.ek",} + "miek.nl.": ".nl.miek", + "mi\\.ek.nl.": ".nl.mi\\.ek", + `mi\\.ek.nl.`: `.nl.ek.mi\\`, + "": "."} for i, o := range tests { + t.Logf("%s %v\n", i, SplitLabels(i)) if x := toRadixName(i); x != o { t.Logf("%s should convert to %s, not %s\n", i, o, x) t.Fail()