Commit 0a5cb7dc authored by Jakob Borg's avatar Jakob Borg Committed by Andrew Gerrand

net: Don't read beyond end of slice when parsing resolv.conf options.

Fixes #8252.

LGTM=adg
R=ruiu, josharian, adg
CC=golang-codereviews
https://golang.org/cl/102470046
parent c213b886
...@@ -75,19 +75,19 @@ func dnsReadConfig(filename string) (*dnsConfig, error) { ...@@ -75,19 +75,19 @@ func dnsReadConfig(filename string) (*dnsConfig, error) {
for i := 1; i < len(f); i++ { for i := 1; i < len(f); i++ {
s := f[i] s := f[i]
switch { switch {
case len(s) >= 6 && s[0:6] == "ndots:": case hasPrefix(s, "ndots:"):
n, _, _ := dtoi(s, 6) n, _, _ := dtoi(s, 6)
if n < 1 { if n < 1 {
n = 1 n = 1
} }
conf.ndots = n conf.ndots = n
case len(s) >= 8 && s[0:8] == "timeout:": case hasPrefix(s, "timeout:"):
n, _, _ := dtoi(s, 8) n, _, _ := dtoi(s, 8)
if n < 1 { if n < 1 {
n = 1 n = 1
} }
conf.timeout = n conf.timeout = n
case len(s) >= 8 && s[0:9] == "attempts:": case hasPrefix(s, "attempts:"):
n, _, _ := dtoi(s, 9) n, _, _ := dtoi(s, 9)
if n < 1 { if n < 1 {
n = 1 n = 1
...@@ -103,3 +103,7 @@ func dnsReadConfig(filename string) (*dnsConfig, error) { ...@@ -103,3 +103,7 @@ func dnsReadConfig(filename string) (*dnsConfig, error) {
return conf, nil return conf, nil
} }
func hasPrefix(s, prefix string) bool {
return len(s) >= len(prefix) && s[:len(prefix)] == prefix
}
...@@ -3,3 +3,4 @@ ...@@ -3,3 +3,4 @@
domain Home domain Home
nameserver 192.168.1.1 nameserver 192.168.1.1
options ndots:5 timeout:10 attempts:3 rotate options ndots:5 timeout:10 attempts:3 rotate
options attempts 3
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment