diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-03-26 10:43:08 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-03-26 20:41:30 +0100 |
commit | 38e05bd3c7afdd676ac924222c66579978846b84 (patch) | |
tree | 581de7ea19c43a32115082054189b795802ed4a7 /tpl/debug | |
parent | ebfca61ac4d4b62b3e4a50477826a85c06b44552 (diff) | |
download | hugo-38e05bd3c7afdd676ac924222c66579978846b84.tar.gz hugo-38e05bd3c7afdd676ac924222c66579978846b84.zip |
Fix panic with debug.Dump with Page when running the server
This replaces the current implementation with `json.MarshalIndent` which doesn't produce the same output, but at least it doesn't crash.
There's a bug in the upstream `litter` library. This can probably be fixed, but that needs to wait.
I have tested `go-spew` which does not crash, but it is very data racy in this context.
FIxes #12309
Diffstat (limited to 'tpl/debug')
-rw-r--r-- | tpl/debug/debug.go | 8 | ||||
-rw-r--r-- | tpl/debug/debug_integration_test.go | 30 | ||||
-rw-r--r-- | tpl/debug/init.go | 2 |
3 files changed, 37 insertions, 3 deletions
diff --git a/tpl/debug/debug.go b/tpl/debug/debug.go index f603dd94d..027454b53 100644 --- a/tpl/debug/debug.go +++ b/tpl/debug/debug.go @@ -15,12 +15,12 @@ package debug import ( + "encoding/json" "sort" "sync" "time" "github.com/bep/logg" - "github.com/sanity-io/litter" "github.com/spf13/cast" "github.com/yuin/goldmark/util" @@ -108,7 +108,11 @@ type Namespace struct { // Also note that the output from Dump may change from Hugo version to the next, // so don't depend on a specific output. func (ns *Namespace) Dump(val any) string { - return litter.Sdump(val) + b, err := json.MarshalIndent(val, "", " ") + if err != nil { + return "" + } + return string(b) } // VisualizeSpaces returns a string with spaces replaced by a visible string. diff --git a/tpl/debug/debug_integration_test.go b/tpl/debug/debug_integration_test.go index 9a36e2d12..52f0a427c 100644 --- a/tpl/debug/debug_integration_test.go +++ b/tpl/debug/debug_integration_test.go @@ -43,3 +43,33 @@ disableKinds = ["taxonomy", "term"] b.AssertLogContains("timer: name foo count 5 duration") } + +func TestDebugDumpPage(t *testing.T) { + files := ` +-- hugo.toml -- +baseURL = "https://example.org/" +disableLiveReload = true +[taxonomies] +tag = "tags" +-- content/_index.md -- +--- +title: "The Index" +date: 2012-03-15 +--- +-- content/p1.md -- +--- +title: "The First" +tags: ["a", "b"] +--- +-- layouts/_default/list.html -- +Dump: {{ debug.Dump . | safeHTML }} +Dump Site: {{ debug.Dump site }} +Dum site.Taxonomies: {{ debug.Dump site.Taxonomies | safeHTML }} +-- layouts/_default/single.html -- +Dump: {{ debug.Dump . | safeHTML }} + + +` + b := hugolib.TestRunning(t, files) + b.AssertFileContent("public/index.html", "Dump: {\n \"Date\": \"2012-03-15T00:00:00Z\"") +} diff --git a/tpl/debug/init.go b/tpl/debug/init.go index 796a34bfc..1232a4166 100644 --- a/tpl/debug/init.go +++ b/tpl/debug/init.go @@ -36,7 +36,7 @@ func init() { [][2]string{ {`{{ $m := newScratch }} {{ $m.Set "Hugo" "Rocks!" }} -{{ $m.Values | debug.Dump | safeHTML }}`, "map[string]interface {}{\n \"Hugo\": \"Rocks!\",\n}"}, +{{ $m.Values | debug.Dump | safeHTML }}`, "{\n \"Hugo\": \"Rocks!\"\n}"}, }, ) |