From aaf6c91c5d6d6cda40d3185cb07337c1bca2469d Mon Sep 17 00:00:00 2001 From: Pavel Busko Date: Wed, 11 Jun 2025 15:44:18 +0200 Subject: [PATCH 1/2] Do not read entire file in memory for hash calculation Co-authored-by: Jan von Loewenstein --- depot/uploader/uploader.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/depot/uploader/uploader.go b/depot/uploader/uploader.go index d30e2b72..d54ae6ed 100644 --- a/depot/uploader/uploader.go +++ b/depot/uploader/uploader.go @@ -1,6 +1,7 @@ package uploader import ( + "bufio" "context" "crypto/md5" "crypto/sha256" @@ -110,17 +111,15 @@ func (uploader *URLUploader) prepareFileForUpload(fileLocation string, logger la return nil, 0, "", "", err } - contents, err := io.ReadAll(sourceFile) + md5Checksum := md5.New() + sha256Checksum := sha256.New() + _, err = io.Copy(io.MultiWriter(md5Checksum, sha256Checksum), bufio.NewReader(sourceFile)) if err != nil { logger.Error("failed-read", err) - return nil, 0, "", "", err } - md5Checksum := md5.Sum(contents) - sha256Checksum := sha256.Sum256(contents) - - contentMD5 := base64.StdEncoding.EncodeToString(md5Checksum[:]) - contentSHA256 := base64.StdEncoding.EncodeToString(sha256Checksum[:]) + contentMD5 := base64.StdEncoding.EncodeToString(md5Checksum.Sum(nil)) + contentSHA256 := base64.StdEncoding.EncodeToString(sha256Checksum.Sum(nil)) return sourceFile, fileInfo.Size(), contentMD5, contentSHA256, nil } From 053b097902fa99071d2bdf3f6b1469543cbcbd5b Mon Sep 17 00:00:00 2001 From: Pavel Busko Date: Mon, 16 Jun 2025 08:20:20 +0200 Subject: [PATCH 2/2] add missing return statement --- depot/uploader/uploader.go | 1 + 1 file changed, 1 insertion(+) diff --git a/depot/uploader/uploader.go b/depot/uploader/uploader.go index d54ae6ed..fef43c37 100644 --- a/depot/uploader/uploader.go +++ b/depot/uploader/uploader.go @@ -116,6 +116,7 @@ func (uploader *URLUploader) prepareFileForUpload(fileLocation string, logger la _, err = io.Copy(io.MultiWriter(md5Checksum, sha256Checksum), bufio.NewReader(sourceFile)) if err != nil { logger.Error("failed-read", err) + return nil, 0, "", "", err } contentMD5 := base64.StdEncoding.EncodeToString(md5Checksum.Sum(nil))