From ea510f30fa9dd38461d37f33e49d344e788a6eeb Mon Sep 17 00:00:00 2001 From: Jarek Kowalski Date: Mon, 23 Mar 2020 06:16:12 -0700 Subject: [PATCH] repo: fixed race condition during Open() where we may read incomplete file --- repo/open.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/repo/open.go b/repo/open.go index b3f1c43fe..4b6576892 100644 --- a/repo/open.go +++ b/repo/open.go @@ -1,12 +1,14 @@ package repo import ( + "bytes" "context" "encoding/json" "io/ioutil" "path/filepath" "time" + "github.com/natefinch/atomic" "github.com/pkg/errors" "github.com/kopia/kopia/repo/blob" @@ -196,7 +198,7 @@ func readAndCacheFormatBlobBytes(ctx context.Context, st blob.Storage, cacheDire } if cacheDirectory != "" { - if err := ioutil.WriteFile(cachedFile, b, 0600); err != nil { + if err := atomic.WriteFile(cachedFile, bytes.NewReader(b)); err != nil { log(ctx).Warningf("warning: unable to write cache: %v", err) } }