From 4e483d36bd3ab9e197acc98c702f3e5c8b43ca8a Mon Sep 17 00:00:00 2001 From: Carlos Sanchez Date: Thu, 20 Mar 2025 19:04:49 +0000 Subject: [PATCH] fix: prevent panic when ChartDownloader.getOciURI needs to lookup tags because no version is provided but no RegistryClient is provided Signed-off-by: Carlos Sanchez --- pkg/downloader/chart_downloader.go | 4 ++++ pkg/downloader/chart_downloader_test.go | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/pkg/downloader/chart_downloader.go b/pkg/downloader/chart_downloader.go index 04c56e614..529fd788e 100644 --- a/pkg/downloader/chart_downloader.go +++ b/pkg/downloader/chart_downloader.go @@ -164,6 +164,10 @@ func (c *ChartDownloader) ResolveChartVersion(ref, version string) (*url.URL, er } if registry.IsOCI(u.String()) { + if c.RegistryClient == nil { + return nil, fmt.Errorf("unable to lookup ref %s at version '%s', missing registry client", ref, version) + } + return c.RegistryClient.ValidateReference(ref, version, u) } diff --git a/pkg/downloader/chart_downloader_test.go b/pkg/downloader/chart_downloader_test.go index 766afede1..a2e09eae5 100644 --- a/pkg/downloader/chart_downloader_test.go +++ b/pkg/downloader/chart_downloader_test.go @@ -23,6 +23,7 @@ import ( "helm.sh/helm/v4/internal/test/ensure" "helm.sh/helm/v4/pkg/cli" "helm.sh/helm/v4/pkg/getter" + "helm.sh/helm/v4/pkg/registry" "helm.sh/helm/v4/pkg/repo" "helm.sh/helm/v4/pkg/repo/repotest" ) @@ -60,10 +61,17 @@ func TestResolveChartRef(t *testing.T) { {name: "oci ref with sha256 and version mismatch", ref: "oci://example.com/install/by/sha:0.1.1@sha256:d234555386402a5867ef0169fefe5486858b6d8d209eaf32fd26d29b16807fd6", version: "0.1.2", fail: true}, } + // Create a mock registry client for OCI references + registryClient, err := registry.NewClient() + if err != nil { + t.Fatal(err) + } + c := ChartDownloader{ Out: os.Stderr, RepositoryConfig: repoConfig, RepositoryCache: repoCache, + RegistryClient: registryClient, Getters: getter.All(&cli.EnvSettings{ RepositoryConfig: repoConfig, RepositoryCache: repoCache,