aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/dnsserver/register.go11
-rw-r--r--plugin/normalize.go6
-rw-r--r--test/corefile_test.go17
3 files changed, 33 insertions, 1 deletions
diff --git a/core/dnsserver/register.go b/core/dnsserver/register.go
index 1eb457b8e..a407c8938 100644
--- a/core/dnsserver/register.go
+++ b/core/dnsserver/register.go
@@ -66,6 +66,17 @@ func (h *dnsContext) InspectServerBlocks(sourceFile string, serverBlocks []caddy
for ik, k := range s.Keys {
trans, k1 := parse.Transport(k) // get rid of any dns:// or other scheme.
hosts, port, err := plugin.SplitHostPort(k1)
+ // We need to make this a fully qualified domain name to catch all errors here and not later when
+ // plugin.Normalize is called again on these strings, with the prime difference being that the domain
+ // name is fully qualified. This was found by fuzzing where "ȶ" is deemed OK, but "ȶ." is not (might be a
+ // bug in miekg/dns actually). But here we were checking ȶ, which is OK, and later we barf in ȶ. leading to
+ // "index out of range".
+ for ih := range hosts {
+ _, _, err := plugin.SplitHostPort(dns.Fqdn(hosts[ih]))
+ if err != nil {
+ return nil, err
+ }
+ }
if err != nil {
return nil, err
}
diff --git a/plugin/normalize.go b/plugin/normalize.go
index 96ec59c76..10a60a806 100644
--- a/plugin/normalize.go
+++ b/plugin/normalize.go
@@ -132,7 +132,11 @@ func OriginsFromArgsOrServerBlock(args, serverblock []string) []string {
}
s := []string{}
for i := range args {
- s = append(s, Host(args[i]).Normalize()...)
+ sx := Host(args[i]).Normalize()
+ if len(sx) == 0 {
+ continue // silently ignores errors.
+ }
+ s = append(s, sx...)
}
return s
diff --git a/test/corefile_test.go b/test/corefile_test.go
new file mode 100644
index 000000000..1f08ab2f1
--- /dev/null
+++ b/test/corefile_test.go
@@ -0,0 +1,17 @@
+package test
+
+import (
+ "testing"
+)
+
+func TestCorefile1(t *testing.T) {
+ corefile := `ȶ
+acl
+`
+ // this crashed, now it should return an error.
+ i, _, _, err := CoreDNSServerAndPorts(corefile)
+ if err == nil {
+ defer i.Stop()
+ t.Fatalf("Expected an error got none")
+ }
+}