From 8807cea7f3a89809fb8ff174c87134b0d9d020d3 Mon Sep 17 00:00:00 2001 From: Devashish Date: Mon, 21 Oct 2024 16:54:02 -0400 Subject: [PATCH] Use single buffer --- provisioner/hcp-sbom/provisioner.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/provisioner/hcp-sbom/provisioner.go b/provisioner/hcp-sbom/provisioner.go index 1f6555862..cddb9b1f2 100644 --- a/provisioner/hcp-sbom/provisioner.go +++ b/provisioner/hcp-sbom/provisioner.go @@ -11,6 +11,7 @@ import ( "context" "errors" "fmt" + "io" "log" "os" @@ -101,21 +102,21 @@ func (p *Provisioner) downloadAndValidateSBOM( ) error { src, err := interpolate.Render(p.config.Source, &p.config.ctx) if err != nil { - return fmt.Errorf("error interpolating source: %s", err) + return fmt.Errorf("error interpolating SBOM source: %s", err) } var buf bytes.Buffer if err = comm.Download(src, &buf); err != nil { - ui.Error(fmt.Sprintf("download failed for SBOM file: %s", err)) + ui.Errorf("download failed for SBOM file: %s", err) return err } - pkrBuf := bytes.NewBuffer(buf.Bytes()) - usrBuf := bytes.NewBuffer(buf.Bytes()) - if _, err = ValidateSBOM(&buf); err != nil { - ui.Error(fmt.Sprintf("validation failed for SBOM file: %s", err)) + reader := bytes.NewReader(buf.Bytes()) + if _, err = ValidateSBOM(reader); err != nil { + ui.Errorf("validation failed for SBOM file: %s", err) return err } + reader.Seek(0, io.SeekStart) // SBOM for Packer pkrDst, err := p.getPackerDestination(generatedData) @@ -123,10 +124,11 @@ func (p *Provisioner) downloadAndValidateSBOM( return fmt.Errorf("failed to get Packer SBOM destination: %s", err) } - err = p.writeToFile(pkrBuf, pkrDst) + err = p.writeToFile(reader, pkrDst) if err != nil { return fmt.Errorf("failed to download Packer SBOM: %s", err) } + reader.Seek(0, io.SeekStart) log.Printf("Packer SBOM file successfully downloaded to: %s\n", pkrDst) // SBOM for User @@ -136,7 +138,7 @@ func (p *Provisioner) downloadAndValidateSBOM( } if usrDst != "" { - err = p.writeToFile(usrBuf, usrDst) + err = p.writeToFile(reader, usrDst) if err != nil { return fmt.Errorf("failed to download User SBOM: %s", err) } @@ -198,7 +200,7 @@ func (p *Provisioner) getPackerDestination(generatedData map[string]interface{}) return dst, nil } -func (p *Provisioner) writeToFile(buf *bytes.Buffer, dst string) error { +func (p *Provisioner) writeToFile(buf *bytes.Reader, dst string) error { // Open the destination file f, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) if err != nil {