From 504ddcb77af4c5c02e164ee1e87f867bccdc379b Mon Sep 17 00:00:00 2001 From: Max Altgelt Date: Mon, 9 Feb 2026 09:02:54 +0100 Subject: [PATCH] fix: don't traverse into references --- reference.go | 5 +++++ reference_test.go | 3 +++ 2 files changed, 8 insertions(+) diff --git a/reference.go b/reference.go index 8318928..1e96f0b 100644 --- a/reference.go +++ b/reference.go @@ -52,6 +52,8 @@ func (r *Reference) ToJsonPointer() jsonpointer.Pointer { return r.jsonPointer } +var referenceType = reflect.TypeFor[Reference]() + func findRelativeJsonPointer(base reflect.Value, pointedField reflect.Value) jsonpointer.Pointer { for { if base.Equal(pointedField) { @@ -60,6 +62,9 @@ func findRelativeJsonPointer(base reflect.Value, pointedField reflect.Value) jso if resolver, isResolver := base.Interface().(JsonReferenceResolver); isResolver { return resolver.RelativeJsonPointer(pointedField.Interface()) } + if base.Type() == referenceType { // Don't recurse into other references + return nil + } if base.Kind() == reflect.Ptr || base.Kind() == reflect.Interface { if base.IsNil() { return nil diff --git a/reference_test.go b/reference_test.go index 5a4291d..372761d 100644 --- a/reference_test.go +++ b/reference_test.go @@ -10,6 +10,8 @@ import ( type testObject struct { ObjectHeader + Recursive *Reference + Substruct struct { SubField1 string `json:"subfield1" textlog:"subfield1"` } `json:"substruct" textlog:"substruct,expand"` @@ -89,6 +91,7 @@ func TestReference_ToJsonPointer(t *testing.T) { test.Valuer.Subfield6 = "subfield6" test.Valuer.Subfield7 = "subfield7" test.SubObject = &SubObject{Subfield8: "subfield8"} + test.Recursive = NewReference(&test, &test.Substruct) var tests = []struct { PointedField any