From da231fb56ecaf8022d353b751aa6ae847f41fb19 Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 9 Aug 2023 12:14:38 +0100 Subject: [PATCH] exporter: avoid modifying exporter inputs Co-authored-by: fahed dorgaa Co-authored-by: a-palchikov Signed-off-by: Justin Chadwell --- exporter/containerimage/export.go | 1 + exporter/oci/export.go | 1 + solver/result/result.go | 10 ++++++++++ 3 files changed, 12 insertions(+) diff --git a/exporter/containerimage/export.go b/exporter/containerimage/export.go index 3f8865f8e..9a0b30ba4 100644 --- a/exporter/containerimage/export.go +++ b/exporter/containerimage/export.go @@ -188,6 +188,7 @@ func (e *imageExporterInstance) Config() *exporter.Config { } func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source, sessionID string) (_ map[string]string, descref exporter.DescriptorReference, err error) { + src = src.Clone() if src.Metadata == nil { src.Metadata = make(map[string][]byte) } diff --git a/exporter/oci/export.go b/exporter/oci/export.go index f1a1aa55c..b6124172a 100644 --- a/exporter/oci/export.go +++ b/exporter/oci/export.go @@ -117,6 +117,7 @@ func (e *imageExporterInstance) Export(ctx context.Context, src *exporter.Source return nil, nil, errors.Errorf("docker exporter does not currently support exporting manifest lists") } + src = src.Clone() if src.Metadata == nil { src.Metadata = make(map[string][]byte) } diff --git a/solver/result/result.go b/solver/result/result.go index cfcfe9dcb..644ec5d0f 100644 --- a/solver/result/result.go +++ b/solver/result/result.go @@ -1,6 +1,7 @@ package result import ( + "maps" "sync" "github.com/pkg/errors" @@ -14,6 +15,15 @@ type Result[T comparable] struct { Attestations map[string][]Attestation[T] } +func (r *Result[T]) Clone() *Result[T] { + return &Result[T]{ + Ref: r.Ref, + Refs: maps.Clone(r.Refs), + Metadata: maps.Clone(r.Metadata), + Attestations: maps.Clone(r.Attestations), + } +} + func (r *Result[T]) AddMeta(k string, v []byte) { r.mu.Lock() if r.Metadata == nil {