Commit 71bb575b authored by gomakesix's avatar gomakesix Committed by GitHub

plugin/auto: Fix panic caused by config invalid reload value (#4986)

Automatically submitted.
parent e799a0f5
package auto package auto
import ( import (
"errors"
"os" "os"
"path/filepath" "path/filepath"
"regexp" "regexp"
...@@ -44,7 +45,9 @@ func setup(c *caddy.Controller) error { ...@@ -44,7 +45,9 @@ func setup(c *caddy.Controller) error {
if err != nil { if err != nil {
return err return err
} }
if a.loader.ReloadInterval == 0 {
return nil
}
go func() { go func() {
ticker := time.NewTicker(a.loader.ReloadInterval) ticker := time.NewTicker(a.loader.ReloadInterval)
for { for {
...@@ -131,7 +134,14 @@ func autoParse(c *caddy.Controller) (Auto, error) { ...@@ -131,7 +134,14 @@ func autoParse(c *caddy.Controller) (Auto, error) {
} }
case "reload": case "reload":
d, err := time.ParseDuration(c.RemainingArgs()[0]) t := c.RemainingArgs()
if len(t) < 1 {
return a, errors.New("reload duration value is expected")
}
d, err := time.ParseDuration(t[0])
if d < 0 {
err = errors.New("invalid duration")
}
if err != nil { if err != nil {
return a, plugin.Error("file", err) return a, plugin.Error("file", err)
} }
......
...@@ -126,3 +126,52 @@ func TestAutoParse(t *testing.T) { ...@@ -126,3 +126,52 @@ func TestAutoParse(t *testing.T) {
} }
} }
} }
func TestSetupReload(t *testing.T) {
tests := []struct {
name string
config string
wantErr bool
}{
{
name: "reload valid",
config: `auto {
directory .
reload 5s
}`,
wantErr: false,
},
{
name: "reload disable",
config: `auto {
directory .
reload 0
}`,
wantErr: false,
},
{
name: "reload invalid",
config: `auto {
directory .
reload -1s
}`,
wantErr: true,
},
{
name: "reload invalid",
config: `auto {
directory .
reload
}`,
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
ctr := caddy.NewTestController("dns", tt.config)
if err := setup(ctr); (err != nil) != tt.wantErr {
t.Errorf("Error: setup() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}
package file package file
import ( import (
"errors"
"os" "os"
"path/filepath" "path/filepath"
"time" "time"
...@@ -108,7 +109,11 @@ func fileParse(c *caddy.Controller) (Zones, error) { ...@@ -108,7 +109,11 @@ func fileParse(c *caddy.Controller) (Zones, error) {
for c.NextBlock() { for c.NextBlock() {
switch c.Val() { switch c.Val() {
case "reload": case "reload":
d, err := time.ParseDuration(c.RemainingArgs()[0]) t := c.RemainingArgs()
if len(t) < 1 {
return Zones{}, errors.New("reload duration value is expected")
}
d, err := time.ParseDuration(t[0])
if err != nil { if err != nil {
return Zones{}, plugin.Error("file", err) return Zones{}, plugin.Error("file", err)
} }
......
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