hugo

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

git clone git://git.shimmy1996.com/hugo.git
commit 535755e4f80d96b42a9be05fa85c7827a5e1dbc7
parent 3583dd6d713c243808b5e8724b32565ceaf66104
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Thu, 11 Oct 2018 11:05:30 +0200

common/collections: Fix type checking in Append

The fix introduced in Hugo `0.49.1` had an unintended side-effect in the `Append` func used in both `append` and `.Scratch.Add`.

This commit fixes that by loosen/fixing the type checking so concrete types can be appended to interface slices.

Fixes #5303

Diffstat:
Mcommon/collections/append.go | 2+-
Mcommon/collections/append_test.go | 6++++++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/common/collections/append.go b/common/collections/append.go
@@ -59,7 +59,7 @@ func Append(to interface{}, from ...interface{}) (interface{}, error) {
 
 	for _, f := range from {
 		fv := reflect.ValueOf(f)
-		if tot != fv.Type() {
+		if !fv.Type().AssignableTo(tot) {
 			return nil, fmt.Errorf("append element type mismatch: expected %v, got %v", tot, fv.Type())
 		}
 		tov = reflect.Append(tov, fv)
diff --git a/common/collections/append_test.go b/common/collections/append_test.go
@@ -43,7 +43,13 @@ func TestAppend(t *testing.T) {
 			tstSlicers{&tstSlicer{"a"},
 				&tstSlicer{"b"},
 				&tstSlicer{"c"}}},
+		{testSlicerInterfaces{&tstSlicerIn1{"a"}, &tstSlicerIn1{"b"}},
+			[]interface{}{&tstSlicerIn1{"c"}},
+			testSlicerInterfaces{&tstSlicerIn1{"a"}, &tstSlicerIn1{"b"}, &tstSlicerIn1{"c"}}},
 		// Errors
+		{testSlicerInterfaces{&tstSlicerIn1{"a"}, &tstSlicerIn1{"b"}},
+			[]interface{}{"c"},
+			false},
 		{"", []interface{}{[]string{"a", "b"}}, false},
 		// No string concatenation.
 		{"ab",