1
0
mirror of https://github.com/danog/liquid.git synced 2024-11-27 00:24:41 +01:00

Merge pull request #28 from Proximaio/feature/struct_pointer_member_fix

Fix struct PropertyValue attempting to use an invalid pointer
This commit is contained in:
Oliver Steele 2017-08-03 09:20:04 -04:00 committed by GitHub
commit 519fbbeb04
2 changed files with 9 additions and 0 deletions

View File

@ -45,6 +45,9 @@ func (v structValue) PropertyValue(index Value) Value {
}
rt = rt.Elem()
rv = rv.Elem()
if !rv.IsValid() {
return nilValue
}
}
if _, found := rt.MethodByName(name); found {
m := rv.MethodByName(name)

View File

@ -9,6 +9,7 @@ import (
type testValueStruct struct {
F int
Nest *testValueStruct
Renamed int `liquid:"name"`
Omitted int `liquid:"-"`
F1 func() int
@ -27,6 +28,7 @@ func (tv *testValueStruct) PM2e() (int, error) { return 4, fmt.Errorf("expected
func TestValue_struct(t *testing.T) {
s := ValueOf(testValueStruct{
F: -1,
Nest: &testValueStruct{F: -2},
Renamed: 100,
Omitted: 200,
F1: func() int { return 1 },
@ -39,6 +41,10 @@ func TestValue_struct(t *testing.T) {
require.True(t, s.Contains(ValueOf("F1")))
require.Equal(t, -1, s.PropertyValue(ValueOf("F")).Interface())
// Nesting
require.Equal(t, -2, s.PropertyValue(ValueOf("Nest")).PropertyValue(ValueOf("F")).Interface())
require.Equal(t, nil, s.PropertyValue(ValueOf("Nest")).PropertyValue(ValueOf("Nest")).PropertyValue(ValueOf("F")).Interface())
// field tags
require.False(t, s.Contains(ValueOf("Renamed")))
require.False(t, s.Contains(ValueOf("Omitted")))