Ignore unknown config files in config dir

Swap files etc.

Fixes #5646
This commit is contained in:
Bjørn Erik Pedersen 2019-02-01 07:45:35 +01:00
parent d9282cf98a
commit 3244cb3b31
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
4 changed files with 59 additions and 2 deletions

View file

@ -14,6 +14,9 @@
package config
import (
"path/filepath"
"strings"
"github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/parser/metadecoders"
"github.com/spf13/afero"
@ -21,9 +24,23 @@ import (
)
var (
ValidConfigFileExtensions = []string{"toml", "yaml", "yml", "json"}
ValidConfigFileExtensions = []string{"toml", "yaml", "yml", "json"}
validConfigFileExtensionsMap map[string]bool = make(map[string]bool)
)
func init() {
for _, ext := range ValidConfigFileExtensions {
validConfigFileExtensionsMap[ext] = true
}
}
// IsValidConfigFilename returns whether filename is one of the supported
// config formats in Hugo.
func IsValidConfigFilename(filename string) bool {
ext := strings.ToLower(strings.TrimPrefix(filepath.Ext(filename), "."))
return validConfigFileExtensionsMap[ext]
}
// FromConfigString creates a config from the given YAML, JSON or TOML config. This is useful in tests.
func FromConfigString(config, configType string) (Provider, error) {
v := newViper()

View file

@ -0,0 +1,34 @@
// Copyright 2019 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import (
"strings"
"testing"
"github.com/stretchr/testify/require"
)
func TestIsValidConfigFileName(t *testing.T) {
assert := require.New(t)
for _, ext := range ValidConfigFileExtensions {
filename := "config." + ext
assert.True(IsValidConfigFilename(filename), ext)
assert.True(IsValidConfigFilename(strings.ToUpper(filename)))
}
assert.False(IsValidConfigFilename(""))
assert.False(IsValidConfigFilename("config.toml.swp"))
}

View file

@ -283,6 +283,10 @@ func (l configLoader) loadConfigFromConfigDir(v *viper.Viper) ([]string, error)
return nil
}
if !config.IsValidConfigFilename(path) {
return nil
}
name := helpers.Filename(filepath.Base(path))
item, err := metadecoders.Default.UnmarshalFileToMap(sourceFs, path)

View file

@ -97,7 +97,9 @@ p3 = "p3params_no_production"
fb = fb.WithWorkingDir("config/development")
// This is set in all the config.toml variants above, but this will win.
fb.Add("config.toml", `paginatePath = "pag_development"`)
fb.Add("config.TOML", `paginatePath = "pag_development"`)
// Issue #5646
fb.Add("config.toml.swp", `p3 = "paginatePath = "nono"`)
fb.Add("params.no.toml", `p3 = "p3params_no_development"`)
fb.Add("params.toml", `p3 = "p3params_development"`)