Check for empty deployment targets and matchers
authorJoe Mooring <joe.mooring@veriphor.com>
Tue, 30 Nov 2021 21:39:47 +0000 (13:39 -0800)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 1 Dec 2021 09:17:42 +0000 (10:17 +0100)
Fixes #9220

deploy/deployConfig.go
deploy/deployConfig_test.go

index 443c5901aaa75939d4b7a125111a714db01d495d..e2413a6c043a91787aa5beb398d6f48106328d0b 100644 (file)
@@ -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)
index e30f31c321912726fef3766a71a6ba4cc4b6879b..091ebdb2ecdf868d6688411b2f385e3c03e66d61 100644 (file)
@@ -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)
+}