diff --git a/datamodel/low/extraction_functions.go b/datamodel/low/extraction_functions.go index d0037b2..471e1d4 100644 --- a/datamodel/low/extraction_functions.go +++ b/datamodel/low/extraction_functions.go @@ -823,6 +823,9 @@ func AreEqual(l, r Hashable) bool { if l == nil || r == nil { return false } + if reflect.ValueOf(l).IsNil() || reflect.ValueOf(r).IsNil() { + return false + } return l.Hash() == r.Hash() } diff --git a/datamodel/low/v3/paths.go b/datamodel/low/v3/paths.go index 285d1e3..8ee7e38 100644 --- a/datamodel/low/v3/paths.go +++ b/datamodel/low/v3/paths.go @@ -154,7 +154,7 @@ func (p *Paths) Build(ctx context.Context, _, root *yaml.Node, idx *index.SpecIn err := path.Build(ctx, cNode, pNode, idx) if err != nil { - if idx.GetLogger() != nil { + if idx != nil && idx.GetLogger() != nil { idx.GetLogger().Error(fmt.Sprintf("error building path item '%s'", err.Error())) } //return buildResult{}, err diff --git a/what-changed/model/paths.go b/what-changed/model/paths.go index 5d63aa2..52173af 100644 --- a/what-changed/model/paths.go +++ b/what-changed/model/paths.go @@ -146,11 +146,16 @@ func ComparePaths(l, r any) *PathsChanges { lKeys := make(map[string]low.ValueReference[*v3.PathItem]) rKeys := make(map[string]low.ValueReference[*v3.PathItem]) - for k := range lPath.PathItems { - lKeys[k.Value] = lPath.PathItems[k] + + if lPath != nil { + for k := range lPath.PathItems { + lKeys[k.Value] = lPath.PathItems[k] + } } - for k := range rPath.PathItems { - rKeys[k.Value] = rPath.PathItems[k] + if rPath != nil { + for k := range rPath.PathItems { + rKeys[k.Value] = rPath.PathItems[k] + } } // run every comparison in a thread. @@ -199,7 +204,15 @@ func ComparePaths(l, r any) *PathsChanges { pc.PathItemsChanges = pathChanges } - pc.ExtensionChanges = CompareExtensions(lPath.Extensions, rPath.Extensions) + var lExt, rExt map[low.KeyReference[string]]low.ValueReference[any] + if lPath != nil { + lExt = lPath.Extensions + } + if rPath != nil { + rExt = rPath.Extensions + } + + pc.ExtensionChanges = CompareExtensions(lExt, rExt) } pc.PropertyChanges = NewPropertyChanges(changes) return pc