mirror of
https://github.com/gohugoio/hugo.git
synced 2025-04-27 22:21:07 +03:00
Fix potential nilpointer in httpcache config
This commit is contained in:
parent
d0ce942190
commit
227e429267
2 changed files with 42 additions and 0 deletions
11
cache/httpcache/httpcache.go
vendored
11
cache/httpcache/httpcache.go
vendored
|
@ -122,6 +122,10 @@ type GlobMatcher struct {
|
||||||
Includes []string
|
Includes []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gm GlobMatcher) IsZero() bool {
|
||||||
|
return len(gm.Includes) == 0 && len(gm.Excludes) == 0
|
||||||
|
}
|
||||||
|
|
||||||
type ConfigCompiled struct {
|
type ConfigCompiled struct {
|
||||||
For predicate.P[string]
|
For predicate.P[string]
|
||||||
PollConfigs []PollConfigCompiled
|
PollConfigs []PollConfigCompiled
|
||||||
|
@ -155,6 +159,9 @@ func (p PollConfigCompiled) IsZero() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gm *GlobMatcher) CompilePredicate() (func(string) bool, error) {
|
func (gm *GlobMatcher) CompilePredicate() (func(string) bool, error) {
|
||||||
|
if gm.IsZero() {
|
||||||
|
panic("no includes or excludes")
|
||||||
|
}
|
||||||
var p predicate.P[string]
|
var p predicate.P[string]
|
||||||
for _, include := range gm.Includes {
|
for _, include := range gm.Includes {
|
||||||
g, err := glob.Compile(include, '/')
|
g, err := glob.Compile(include, '/')
|
||||||
|
@ -203,5 +210,9 @@ func DecodeConfig(bcfg config.BaseConfig, m map[string]any) (Config, error) {
|
||||||
return c, err
|
return c, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if c.Cache.For.IsZero() {
|
||||||
|
c.Cache.For = DefaultConfig.Cache.For
|
||||||
|
}
|
||||||
|
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
31
cache/httpcache/httpcache_integration_test.go
vendored
31
cache/httpcache/httpcache_integration_test.go
vendored
|
@ -22,6 +22,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConfigCustom(t *testing.T) {
|
func TestConfigCustom(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
files := `
|
files := `
|
||||||
-- hugo.toml --
|
-- hugo.toml --
|
||||||
[httpcache]
|
[httpcache]
|
||||||
|
@ -51,6 +53,8 @@ includes = ["**gohugo.io**"]
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConfigDefault(t *testing.T) {
|
func TestConfigDefault(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
files := `
|
files := `
|
||||||
-- hugo.toml --
|
-- hugo.toml --
|
||||||
`
|
`
|
||||||
|
@ -62,3 +66,30 @@ func TestConfigDefault(t *testing.T) {
|
||||||
b.Assert(compiled.For("https://gohugo.io/foo.jpg"), qt.IsFalse)
|
b.Assert(compiled.For("https://gohugo.io/foo.jpg"), qt.IsFalse)
|
||||||
b.Assert(compiled.PollConfigFor("https://gohugo.io/foo.jpg").Config.Disable, qt.IsTrue)
|
b.Assert(compiled.PollConfigFor("https://gohugo.io/foo.jpg").Config.Disable, qt.IsTrue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestConfigPollsOnly(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
files := `
|
||||||
|
-- hugo.toml --
|
||||||
|
[httpcache]
|
||||||
|
[[httpcache.polls]]
|
||||||
|
low = "5s"
|
||||||
|
high = "32s"
|
||||||
|
[httpcache.polls.for]
|
||||||
|
includes = ["**gohugo.io**"]
|
||||||
|
|
||||||
|
|
||||||
|
`
|
||||||
|
|
||||||
|
b := hugolib.Test(t, files)
|
||||||
|
|
||||||
|
compiled := b.H.Configs.Base.C.HTTPCache
|
||||||
|
|
||||||
|
b.Assert(compiled.For("https://gohugo.io/posts.json"), qt.IsFalse)
|
||||||
|
b.Assert(compiled.For("https://gohugo.io/foo.jpg"), qt.IsFalse)
|
||||||
|
|
||||||
|
pc := compiled.PollConfigFor("https://gohugo.io/foo.jpg")
|
||||||
|
b.Assert(pc.Config.Low, qt.Equals, 5*time.Second)
|
||||||
|
b.Assert(pc.Config.High, qt.Equals, 32*time.Second)
|
||||||
|
b.Assert(compiled.PollConfigFor("https://example.com/foo.jpg").IsZero(), qt.IsTrue)
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue