From dbef97abadc7c7e79b3c6db3ab410ac9b38ed034 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Thu, 25 Jul 2013 07:55:59 +0100 Subject: [PATCH 1/2] Add MixCase query test As reported by Ask, these aren't correctly handled :( --- server_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server_test.go b/server_test.go index b7fd6796..1069711d 100644 --- a/server_test.go +++ b/server_test.go @@ -55,6 +55,14 @@ func TestServing(t *testing.T) { t.Log("Unexpected result for example.com", txt, "!= Hello example") t.Fail() } + // Test Mixes cased as notices by Ask. + m.SetQuestion("eXaMplE.cOm.", TypeTXT) + r, _, _ = c.Exchange(m, "127.0.0.1:8053") + txt = r.Extra[0].(*TXT).Txt[0] + if txt != "Hello example" { + t.Log("Unexpected result for example.com", txt, "!= Hello example") + t.Fail() + } } func BenchmarkServing(b *testing.B) { From ac0703bbe6603cdde357511c59dfde177e2da8bd Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Thu, 25 Jul 2013 08:32:10 +0100 Subject: [PATCH 2/2] Handle MixCase queries again. Thanks Ask for reporting. --- server.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server.go b/server.go index 27096e9c..5314138b 100644 --- a/server.go +++ b/server.go @@ -168,10 +168,15 @@ func (mux *ServeMux) match(q string, t uint16) Handler { mux.m.RLock() defer mux.m.RUnlock() var handler Handler + b := make([]byte, len(q)) // worst case, one label of length q off := 0 end := false for { - if h, ok := mux.z[q[off:]]; ok { + l := len(q[off:]) + for i := 0; i < l; i++ { + b[i] = q[off+i] | ( 'a' - 'A') + } + if h, ok := mux.z[string(b[:l])]; ok { // 'causes garbage, might want to change the map key if t != TypeDS { return h } else {