Prevent cyclic ref crash in JSON encode

Note that this commit makes no promise about great JSON output from the encoder, but the cyclic refs should be broken.

Fixes #1123
This commit is contained in:
bep 2015-05-23 12:28:01 +02:00
parent be778c3160
commit be7c3bbb09
4 changed files with 35 additions and 3 deletions

View file

@ -22,7 +22,7 @@ import (
type Node struct {
RSSLink template.HTML
Site *SiteInfo
Site *SiteInfo `json:"-"`
// layout string
Data map[string]interface{}
Title string

View file

@ -71,7 +71,7 @@ type Page struct {
renderingConfigInit sync.Once
PageMeta
Source
Position
Position `json:"-"`
Node
pageMenus PageMenus
pageMenusInit sync.Once

View file

@ -79,7 +79,7 @@ type Site struct {
timer *nitro.B
Targets targetList
targetListInit sync.Once
Completed chan bool
Completed chan bool `json:"-"`
RunMode runmode
params map[string]interface{}
draftCount int

View file

@ -0,0 +1,32 @@
package hugolib
import (
"encoding/json"
"fmt"
"testing"
)
// Issue #1123
// Testing prevention of cyclic refs in JSON encoding
// May be smart to run with: -timeout 4000ms
func TestEncodePage(t *testing.T) {
// borrowed from menu_test.go
s := createTestSite(MENU_PAGE_SOURCES)
testSiteSetup(s, t)
j, err := json.Marshal(s)
check(t, err)
fmt.Println("Site as JSON", string(j))
p, err := json.Marshal(s.Pages[0])
check(t, err)
fmt.Println("Page as JSON", string(p))
}
func check(t *testing.T, err error) {
if err != nil {
t.Fatalf("Failed %s", err)
}
}