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
import (
"errors"
"os"
"path/filepath"
"regexp"
......@@ -44,7 +45,9 @@ func setup(c *caddy.Controller) error {
if err != nil {
return err
}
if a.loader.ReloadInterval == 0 {
return nil
}
go func() {
ticker := time.NewTicker(a.loader.ReloadInterval)
for {
......@@ -131,7 +134,14 @@ func autoParse(c *caddy.Controller) (Auto, error) {
}
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 {
return a, plugin.Error("file", err)
}
......
......@@ -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
import (
"errors"
"os"
"path/filepath"
"time"
......@@ -108,7 +109,11 @@ func fileParse(c *caddy.Controller) (Zones, error) {
for c.NextBlock() {
switch c.Val() {
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 {
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