hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit b09a40333f382cc1034d2eda856230258ab6b8cc
parent 7540a62834d4465af8936967e430a9e05a1e1359
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Wed, 28 Nov 2018 12:36:59 +0100

hugolib: Improve nil handling in IsDescendant and IsAncestor

Fixes #5461

Diffstat:
Mhugolib/site_sections.go | 11+++++++++--
Mhugolib/site_sections_test.go | 14++++++++++++++
2 files changed, 23 insertions(+), 2 deletions(-)
diff --git a/hugolib/site_sections.go b/hugolib/site_sections.go
@@ -104,8 +104,11 @@ func (p *Page) InSection(other interface{}) (bool, error) {
 // IsDescendant returns whether the current page is a descendant of the given page.
 // Note that this method is not relevant for taxonomy lists and taxonomy terms pages.
 func (p *Page) IsDescendant(other interface{}) (bool, error) {
+	if p == nil {
+		return false, nil
+	}
 	pp, err := unwrapPage(other)
-	if err != nil {
+	if err != nil || pp == nil {
 		return false, err
 	}
 
@@ -119,8 +122,12 @@ func (p *Page) IsDescendant(other interface{}) (bool, error) {
 // IsAncestor returns whether the current page is an ancestor of the given page.
 // Note that this method is not relevant for taxonomy lists and taxonomy terms pages.
 func (p *Page) IsAncestor(other interface{}) (bool, error) {
+	if p == nil {
+		return false, nil
+	}
+
 	pp, err := unwrapPage(other)
-	if err != nil {
+	if err != nil || pp == nil {
 		return false, err
 	}
 
diff --git a/hugolib/site_sections_test.go b/hugolib/site_sections_test.go
@@ -238,6 +238,8 @@ PAG|{{ .Title }}|{{ $sect.InSection . }}
 			assert.Len(p.Sections(), 0)
 		}},
 		{"l1,l2,l3", func(p *Page) {
+			var nilp *Page
+
 			assert.Equal("T3_-1", p.title)
 			assert.Len(p.Pages, 2)
 			assert.Equal("T2_-1", p.Parent().title)
@@ -247,6 +249,12 @@ PAG|{{ .Title }}|{{ $sect.InSection . }}
 			isDescendant, err := l1.IsDescendant(p)
 			assert.NoError(err)
 			assert.False(isDescendant)
+			isDescendant, err = l1.IsDescendant(nil)
+			assert.NoError(err)
+			assert.False(isDescendant)
+			isDescendant, err = nilp.IsDescendant(p)
+			assert.NoError(err)
+			assert.False(isDescendant)
 			isDescendant, err = p.IsDescendant(l1)
 			assert.NoError(err)
 			assert.True(isDescendant)
@@ -258,6 +266,12 @@ PAG|{{ .Title }}|{{ $sect.InSection . }}
 			assert.NoError(err)
 			assert.False(isAncestor)
 			assert.Equal(l1, p.FirstSection())
+			isAncestor, err = p.IsAncestor(nil)
+			assert.NoError(err)
+			assert.False(isAncestor)
+			isAncestor, err = nilp.IsAncestor(l1)
+			assert.NoError(err)
+			assert.False(isAncestor)
 
 		}},
 		{"perm a,link", func(p *Page) {