From 6768daec0703bab6ad3a6e723c048be6156e4bbb Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Wed, 13 May 2020 20:38:21 +0200 Subject: [PATCH] lib/db: Dont add symlinks to blocks map (fixes #6637) (#6639) --- lib/db/lowlevel.go | 4 ++-- lib/db/schemaupdater.go | 2 +- lib/model/folder.go | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/db/lowlevel.go b/lib/db/lowlevel.go index 985aa29eb..bbeae7fcc 100644 --- a/lib/db/lowlevel.go +++ b/lib/db/lowlevel.go @@ -198,7 +198,7 @@ func (db *Lowlevel) updateLocalFiles(folder []byte, fs []protocol.FileInfo, meta blocksHashSame := ok && bytes.Equal(ef.BlocksHash, f.BlocksHash) if ok { - if !ef.IsDirectory() && !ef.IsDeleted() && !ef.IsInvalid() { + if len(ef.Blocks) != 0 && !ef.IsInvalid() { for _, block := range ef.Blocks { keyBuf, err = db.keyer.GenerateBlockMapKey(keyBuf, folder, block.Hash, name) if err != nil { @@ -259,7 +259,7 @@ func (db *Lowlevel) updateLocalFiles(folder []byte, fs []protocol.FileInfo, meta } l.Debugf("adding sequence; folder=%q sequence=%v %v", folder, f.Sequence, f.Name) - if !f.IsDirectory() && !f.IsDeleted() && !f.IsInvalid() { + if len(f.Blocks) != 0 && !f.IsInvalid() { for i, block := range f.Blocks { binary.BigEndian.PutUint32(blockBuf, uint32(i)) keyBuf, err = db.keyer.GenerateBlockMapKey(keyBuf, folder, block.Hash, name) diff --git a/lib/db/schemaupdater.go b/lib/db/schemaupdater.go index f973b2f9f..f0c86b961 100644 --- a/lib/db/schemaupdater.go +++ b/lib/db/schemaupdater.go @@ -585,7 +585,7 @@ func (db *schemaUpdater) updateSchemaTo11(_ int) error { var putErr error err := t.withHave(folder, protocol.LocalDeviceID[:], nil, true, func(fi FileIntf) bool { f := fi.(FileInfoTruncated) - if f.IsDirectory() || f.IsDeleted() || f.IsInvalid() || f.BlocksHash == nil { + if f.IsDirectory() || f.IsDeleted() || f.IsSymlink() || f.IsInvalid() || f.BlocksHash == nil { return true } diff --git a/lib/model/folder.go b/lib/model/folder.go index edcb903ff..c9b7d14fd 100644 --- a/lib/model/folder.go +++ b/lib/model/folder.go @@ -623,6 +623,10 @@ func (f *folder) scanSubdirs(subDirs []string) error { } func (f *folder) findRename(snap *db.Snapshot, mtimefs fs.Filesystem, file protocol.FileInfo) (protocol.FileInfo, bool) { + if len(file.Blocks) == 0 { + return protocol.FileInfo{}, false + } + found := false nf := protocol.FileInfo{}