Skip to content

Commit e9ac839

Browse files
authored
Merge pull request #56 from NextronSystems/fix/no-recursive-expansion
fix: don't traverse into references
2 parents 6dc4c34 + 504ddcb commit e9ac839

2 files changed

Lines changed: 8 additions & 0 deletions

File tree

reference.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ func (r *Reference) ToJsonPointer() jsonpointer.Pointer {
5252
return r.jsonPointer
5353
}
5454

55+
var referenceType = reflect.TypeFor[Reference]()
56+
5557
func findRelativeJsonPointer(base reflect.Value, pointedField reflect.Value) jsonpointer.Pointer {
5658
for {
5759
if base.Equal(pointedField) {
@@ -60,6 +62,9 @@ func findRelativeJsonPointer(base reflect.Value, pointedField reflect.Value) jso
6062
if resolver, isResolver := base.Interface().(JsonReferenceResolver); isResolver {
6163
return resolver.RelativeJsonPointer(pointedField.Interface())
6264
}
65+
if base.Type() == referenceType { // Don't recurse into other references
66+
return nil
67+
}
6368
if base.Kind() == reflect.Ptr || base.Kind() == reflect.Interface {
6469
if base.IsNil() {
6570
return nil

reference_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
type testObject struct {
1111
ObjectHeader
1212

13+
Recursive *Reference
14+
1315
Substruct struct {
1416
SubField1 string `json:"subfield1" textlog:"subfield1"`
1517
} `json:"substruct" textlog:"substruct,expand"`
@@ -89,6 +91,7 @@ func TestReference_ToJsonPointer(t *testing.T) {
8991
test.Valuer.Subfield6 = "subfield6"
9092
test.Valuer.Subfield7 = "subfield7"
9193
test.SubObject = &SubObject{Subfield8: "subfield8"}
94+
test.Recursive = NewReference(&test, &test.Substruct)
9295

9396
var tests = []struct {
9497
PointedField any

0 commit comments

Comments
 (0)