From a1a19b7e8286bdd665a53aee0f06fba5ac3100c8 Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 17:58:59 +0000 Subject: [PATCH] fix(lns): make catalog lookup helpers nil-safe --- lns.go | 8 ++++++-- lns_package_test.go | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/lns.go b/lns.go index a44288f..2f24aac 100644 --- a/lns.go +++ b/lns.go @@ -199,9 +199,14 @@ func LookupCatalogName[T any]( byLabel func(string) (T, bool), byHash func(primitives.Hash) (T, bool), ) (T, bool) { + var zero T + + if byLabel == nil || byHash == nil { + return zero, false + } + label, ok := nameutil.CatalogLabel(name) if !ok { - var zero T return zero, false } @@ -213,7 +218,6 @@ func LookupCatalogName[T any]( normalized, ok := nameutil.Canonicalize(name) if !ok { - var zero T return zero, false } diff --git a/lns_package_test.go b/lns_package_test.go index a46cdfb..8f380eb 100644 --- a/lns_package_test.go +++ b/lns_package_test.go @@ -350,6 +350,26 @@ func TestLookupCatalogNamePreservesDottedLabels(t *testing.T) { } } +func TestLookupCatalogNameNilCallbacks(t *testing.T) { + if got, ok := LookupCatalogName[string]("foo", nil, nil); ok || got != "" { + t.Fatalf("LookupCatalogName with nil callbacks = (%q, %v), want (\"\", false)", got, ok) + } + + if got, ok := GetLookupCatalogName[string]("foo", nil, nil); ok || got != "" { + t.Fatalf("GetLookupCatalogName with nil callbacks = (%q, %v), want (\"\", false)", got, ok) + } + + svc := NewService(nil) + + if got, ok := svc.LookupCatalogName("foo", nil, nil); ok || got != nil { + t.Fatalf("svc.LookupCatalogName with nil callbacks = (%v, %v), want (nil, false)", got, ok) + } + + if got, ok := svc.GetLookupCatalogName("foo", nil, nil); ok || got != nil { + t.Fatalf("svc.GetLookupCatalogName with nil callbacks = (%v, %v), want (nil, false)", got, ok) + } +} + func TestPackageTypeTables(t *testing.T) { if len(Types) == 0 || len(TypesByVal) == 0 { t.Fatal("type lookup tables should not be empty")