]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Avoid panic in invalid language config
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 30 May 2023 09:48:17 +0000 (11:48 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 30 May 2023 13:59:43 +0000 (15:59 +0200)
Fixes #11046

config/allconfig/alldecoders.go
hugolib/config_test.go
langs/config.go

index c8944bd2d1fd083e5b6ee044b232650e6b3a8f6e..b798ef7985e53ab5d031a9cb20e17dda3a67c2cb 100644 (file)
@@ -245,12 +245,17 @@ var allDecoderSetups = map[string]decodeWeight{
                        if len(m) == 1 {
                                // In v0.112.4 we moved this to the language config, but it's very commmon for mono language sites to have this at the top level.
                                var first maps.Params
+                               var ok bool
                                for _, v := range m {
-                                       first = v.(maps.Params)
-                                       break
+                                       first, ok = v.(maps.Params)
+                                       if ok {
+                                               break
+                                       }
                                }
-                               if _, found := first["languagecode"]; !found {
-                                       first["languagecode"] = p.p.GetString("languagecode")
+                               if first != nil {
+                                       if _, found := first["languagecode"]; !found {
+                                               first["languagecode"] = p.p.GetString("languagecode")
+                                       }
                                }
                        }
                        p.c.Languages, err = langs.DecodeConfig(m)
index edb6b793e7e95dec84c633bee673b584bc2106e2..efa2bf6b50fd6a724d6b7b92f5c37a24bb396c9d 100644 (file)
@@ -1067,25 +1067,59 @@ LanguageCode: {{ .Site.LanguageCode }}|{{ site.Language.LanguageCode }}|
 
 }
 
-// Issue 11047
-func TestConfigYamlNil(t *testing.T) {
+func TestConfigMiscPanics(t *testing.T) {
        t.Parallel()
 
-       files := `
+       // Issue 11047,
+       t.Run("empty params", func(t *testing.T) {
+
+               files := `
 -- hugo.yaml --
 params:
 -- layouts/index.html --
 Foo: {{ site.Params.foo }}|
+       
+               
+       `
+               b := NewIntegrationTestBuilder(
+                       IntegrationTestConfig{
+                               T:           t,
+                               TxtarString: files,
+                       },
+               ).Build()
+
+               b.AssertFileContent("public/index.html", "Foo: |")
+       })
 
+       // Issue 11046
+       t.Run("invalid language setup", func(t *testing.T) {
+
+               files := `
+-- hugo.toml --
+baseURL = "https://example.org"
+languageCode = "en-us"
+title = "Blog of me"
+defaultContentLanguage = "en"
+
+[languages]
+       [en]
+       lang = "en"
+       languageName = "English"
+       weight = 1
+-- layouts/index.html --
+Foo: {{ site.Params.foo }}|
        
-`
-       b := NewIntegrationTestBuilder(
-               IntegrationTestConfig{
-                       T:           t,
-                       TxtarString: files,
-               },
-       ).Build()
+               
+       `
+               b, err := NewIntegrationTestBuilder(
+                       IntegrationTestConfig{
+                               T:           t,
+                               TxtarString: files,
+                       },
+               ).BuildE()
 
-       b.AssertFileContent("public/index.html", "Foo: |")
+               b.Assert(err, qt.IsNotNil)
+               b.Assert(err.Error(), qt.Contains, "no languages")
+       })
 
 }
index 15c0bedbc42ade2d66bcc7c39c3482fae1d9c9b6..f60ea94a4dd5f2eafdfe0034c50f1bbbf77d30c9 100644 (file)
@@ -14,6 +14,8 @@
 package langs
 
 import (
+       "errors"
+
        "github.com/gohugoio/hugo/common/maps"
        "github.com/mitchellh/mapstructure"
 )
@@ -46,5 +48,8 @@ func DecodeConfig(m map[string]any) (map[string]LanguageConfig, error) {
        if err := mapstructure.WeakDecode(m, &langs); err != nil {
                return nil, err
        }
+       if len(langs) == 0 {
+               return nil, errors.New("no languages configured")
+       }
        return langs, nil
 }