From f122771fb1345786f81011181cfd2c452f316278 Mon Sep 17 00:00:00 2001 From: Joe Mooring Date: Tue, 30 Nov 2021 13:39:47 -0800 Subject: [PATCH] Check for empty deployment targets and matchers Fixes #9220 --- deploy/deployConfig.go | 8 ++++++++ deploy/deployConfig_test.go | 32 +++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/deploy/deployConfig.go b/deploy/deployConfig.go index 443c5901a..e2413a6c0 100644 --- a/deploy/deployConfig.go +++ b/deploy/deployConfig.go @@ -11,6 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !nodeploy // +build !nodeploy package deploy @@ -24,6 +25,7 @@ import ( hglob "github.com/gohugoio/hugo/hugofs/glob" "github.com/gohugoio/hugo/media" "github.com/mitchellh/mapstructure" + "github.com/pkg/errors" ) const deploymentConfigKey = "deployment" @@ -124,12 +126,18 @@ func decodeConfig(cfg config.Provider) (deployConfig, error) { return dcfg, err } for _, tgt := range dcfg.Targets { + if tgt == nil { + return dcfg, errors.New("empty deployment target") + } if err := tgt.parseIncludeExclude(); err != nil { return dcfg, err } } var err error for _, m := range dcfg.Matchers { + if m == nil { + return dcfg, errors.New("empty deployment matcher") + } m.re, err = regexp.Compile(m.Pattern) if err != nil { return dcfg, fmt.Errorf("invalid deployment.matchers.pattern: %v", err) diff --git a/deploy/deployConfig_test.go b/deploy/deployConfig_test.go index e30f31c32..091ebdb2e 100644 --- a/deploy/deployConfig_test.go +++ b/deploy/deployConfig_test.go @@ -11,6 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build !nodeploy // +build !nodeploy package deploy @@ -21,7 +22,6 @@ import ( qt "github.com/frankban/quicktest" "github.com/gohugoio/hugo/config" - ) func TestDecodeConfigFromTOML(t *testing.T) { @@ -169,3 +169,33 @@ func TestDecodeConfigDefault(t *testing.T) { c.Assert(len(dcfg.Targets), qt.Equals, 0) c.Assert(len(dcfg.Matchers), qt.Equals, 0) } + +func TestEmptyTarget(t *testing.T) { + c := qt.New(t) + + tomlConfig := ` +[deployment] +[[deployment.targets]] +` + cfg, err := config.FromConfigString(tomlConfig, "toml") + c.Assert(err, qt.IsNil) + + _, err = decodeConfig(cfg) + c.Assert(err, qt.Not(qt.IsNil)) +} + +func TestEmptyMatcher(t *testing.T) { + c := qt.New(t) + + tomlConfig := ` +[deployment] +[[deployment.matchers]] +` + cfg, err := config.FromConfigString(tomlConfig, "toml") + c.Assert(err, qt.IsNil) + + _, err = decodeConfig(cfg) + c.Assert(err, qt.Not(qt.IsNil)) + + fmt.Printf("JMM-1: %s", err) +}