Browse Source

lib/db: Dont add symlinks to blocks map (fixes #6637) (#6639)

Simon Frei 5 years ago
parent
commit
6768daec07
3 changed files with 7 additions and 3 deletions
  1. 2 2
      lib/db/lowlevel.go
  2. 1 1
      lib/db/schemaupdater.go
  3. 4 0
      lib/model/folder.go

+ 2 - 2
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)

+ 1 - 1
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
 			}
 

+ 4 - 0
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{}