From 8f6fe440ea868969aca47bb26600da2c3a3c3c2f Mon Sep 17 00:00:00 2001 From: Huan Du Date: Fri, 28 Jul 2023 20:30:13 +0800 Subject: [PATCH] fix a deadloop when parsing variable like a.b.c --- go.mod | 4 +--- go.sum | 9 --------- internal/assertion/assertion.go | 6 +++++- internal/assertion/parser.go | 2 +- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/go.mod b/go.mod index 4d90685..5ce1e79 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,4 @@ module github.com/huandu/go-assert go 1.13 -require ( - github.com/davecgh/go-spew v1.1.1 -) +require github.com/davecgh/go-spew v1.1.1 diff --git a/go.sum b/go.sum index 1041afa..b5e2922 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,2 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/internal/assertion/assertion.go b/internal/assertion/assertion.go index de82e7a..84fc071 100644 --- a/internal/assertion/assertion.go +++ b/internal/assertion/assertion.go @@ -510,7 +510,11 @@ func getValueInterface(v reflect.Value) interface{} { num := v.NumField() for i := 0; i < num; i++ { - st.Field(i).Set(reflect.ValueOf(getValueInterface(v.Field(i)))) + field := st.Field(i) + + if field.CanSet() { + field.Set(reflect.ValueOf(getValueInterface(v.Field(i)))) + } } return st.Interface() diff --git a/internal/assertion/parser.go b/internal/assertion/parser.go index 0f58faf..5cddd1b 100644 --- a/internal/assertion/parser.go +++ b/internal/assertion/parser.go @@ -522,7 +522,7 @@ func IsVar(expr ast.Expr) bool { for { if sel, ok := x.(*ast.SelectorExpr); ok { - x = sel + x = sel.X } else { break }