From bf7d03d02947eb30788f7b14b9405eed91200c48 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Wed, 25 Nov 2020 22:57:25 +0100 Subject: [PATCH] lib/model: Fix enc file size when pulling (fixes #7152) (#7155) --- lib/model/folder_sendrecv.go | 4 ++++ lib/model/sharedpullerstate.go | 11 ++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/model/folder_sendrecv.go b/lib/model/folder_sendrecv.go index ba45c12df..f869c7f1b 100644 --- a/lib/model/folder_sendrecv.go +++ b/lib/model/folder_sendrecv.go @@ -1695,6 +1695,7 @@ func (f *sendReceiveFolder) dbUpdaterRoutine(dbUpdateChan <-chan dbUpdateJob) { return nil } + recvEnc := f.Type == config.FolderTypeReceiveEncrypted loop: for { select { @@ -1706,6 +1707,9 @@ loop: switch job.jobType { case dbUpdateHandleFile, dbUpdateShortcutFile: changedDirs[filepath.Dir(job.file.Name)] = struct{}{} + if recvEnc { + job.file.Size += encryptionTrailerSize(job.file) + } case dbUpdateHandleDir: changedDirs[job.file.Name] = struct{}{} case dbUpdateHandleSymlink, dbUpdateInvalidate: diff --git a/lib/model/sharedpullerstate.go b/lib/model/sharedpullerstate.go index 95d737db0..df940c91c 100644 --- a/lib/model/sharedpullerstate.go +++ b/lib/model/sharedpullerstate.go @@ -192,7 +192,7 @@ func (s *sharedPullerState) tempFileInWritableDir(_ string) error { size := s.file.Size // Trailer added to encrypted files if len(s.file.Encrypted) > 0 { - size += int64(s.file.ProtoSize() + 4) + size += encryptionTrailerSize(s.file) } // Truncate sets the size of the file. This creates a sparse file or a // space reservation, depending on the underlying filesystem. @@ -346,8 +346,7 @@ func (s *sharedPullerState) finalClose() (bool, error) { // folder from encrypted data we can extract this FileInfo from the end of // the file and regain the original metadata. func (s *sharedPullerState) finalizeEncrypted() error { - size := s.file.ProtoSize() - bs := make([]byte, 4+size) + bs := make([]byte, encryptionTrailerSize(s.file)) n, err := s.file.MarshalTo(bs) if err != nil { return err @@ -364,11 +363,13 @@ func (s *sharedPullerState) finalizeEncrypted() error { return err } - s.file.Size += int64(len(bs)) - return nil } +func encryptionTrailerSize(file protocol.FileInfo) int64 { + return int64(file.ProtoSize()) + 4 +} + // Progress returns the momentarily progress for the puller func (s *sharedPullerState) Progress() *pullerProgress { s.mut.RLock()