diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-10-16 08:53:45 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-10-16 10:14:48 +0200 |
commit | a2f666b586b0df063ad240910b28a73dc3aa2673 (patch) | |
tree | eadd3fa1afb33139959d0eec1298fe7944d34d56 /resources/page | |
parent | b1b3bbcdbd585cdac67c1d8fca4c98be11e086d6 (diff) | |
download | hugo-a2f666b586b0df063ad240910b28a73dc3aa2673.tar.gz hugo-a2f666b586b0df063ad240910b28a73dc3aa2673.zip |
Remove erroneously permalink validation
Fixes #12948
Diffstat (limited to 'resources/page')
-rw-r--r-- | resources/page/permalinks.go | 39 | ||||
-rw-r--r-- | resources/page/permalinks_integration_test.go | 36 |
2 files changed, 37 insertions, 38 deletions
diff --git a/resources/page/permalinks.go b/resources/page/permalinks.go index fe9d9f78d..ece10bb40 100644 --- a/resources/page/permalinks.go +++ b/resources/page/permalinks.go @@ -156,9 +156,6 @@ func init() { func (l PermalinkExpander) getOrParsePattern(pattern string) (func(Page) (string, error), error) { return l.patternCache.GetOrCreate(pattern, func() (func(Page) (string, error), error) { - if !l.validate(pattern) { - return nil, &permalinkExpandError{pattern: pattern, err: errPermalinkIllFormed} - } var normalized bool pattern, normalized = l.normalizeEscapeSequencesIn(pattern) @@ -234,37 +231,6 @@ type pageToPermaAttribute func(Page, string) (string, error) var attributeRegexp = regexp.MustCompile(`:\w+(\[.+?\])?`) -// validate determines if a PathPattern is well-formed -func (l PermalinkExpander) validate(pp string) bool { - if len(pp) == 0 { - return false - } - fragments := strings.Split(pp[1:], "/") - bail := false - for i := range fragments { - if bail { - return false - } - if len(fragments[i]) == 0 { - bail = true - continue - } - - matches := attributeRegexp.FindAllStringSubmatch(fragments[i], -1) - if matches == nil { - continue - } - - for _, match := range matches { - k := match[0][1:] - if _, ok := l.callback(k); !ok { - return false - } - } - } - return true -} - type permalinkExpandError struct { pattern string err error @@ -274,10 +240,7 @@ func (pee *permalinkExpandError) Error() string { return fmt.Sprintf("error expanding %q: %s", pee.pattern, pee.err) } -var ( - errPermalinkIllFormed = errors.New("permalink ill-formed") - errPermalinkAttributeUnknown = errors.New("permalink attribute not recognised") -) +var errPermalinkAttributeUnknown = errors.New("permalink attribute not recognised") func (l PermalinkExpander) pageToPermalinkDate(p Page, dateField string) (string, error) { // a Page contains a Node which provides a field Date, time.Time diff --git a/resources/page/permalinks_integration_test.go b/resources/page/permalinks_integration_test.go index 2b9e878b1..4188c70ca 100644 --- a/resources/page/permalinks_integration_test.go +++ b/resources/page/permalinks_integration_test.go @@ -18,6 +18,7 @@ import ( "github.com/bep/logg" qt "github.com/frankban/quicktest" + "github.com/gohugoio/hugo/htesting" "github.com/gohugoio/hugo/hugolib" ) @@ -232,3 +233,38 @@ slug: custom-recipe-2 b.AssertFileContent("public/delicious-recipe/recipe-1/index.html", "Single|page|/delicious-recipe/recipe-1/") b.AssertFileContent("public/delicious-recipe/custom-recipe-2/index.html", "Single|page|/delicious-recipe/custom-recipe-2/") } + +// Issue 12948. +func TestPermalinksWithEscapedColons(t *testing.T) { + t.Parallel() + + if htesting.IsWindows() { + t.Skip("Windows does not support colons in paths") + } + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +[permalinks.page] +s2 = "/c\\:d/:slug/" +-- content/s1/p1.md -- +--- +title: p1 +url: "/a\\:b/:slug/" +--- +-- content/s2/p2.md -- +--- +title: p2 +--- +-- layouts/_default/single.html -- +{{ .Title }} +` + + b := hugolib.Test(t, files) + + b.AssertFileExists("public/a:b/p1/index.html", true) + + // The above URL comes from the URL front matter field where everything is allowed. + // We strip colons from paths constructed by Hugo (they are not supported on Windows). + b.AssertFileExists("public/cd/p2/index.html", true) +} |