Browse Source

Merge pull request #1982 from calmh/fix-1978

Sanitize rescan interval values (fixes #1978)
Zillode 10 years ago
parent
commit
0f1b40da71

+ 7 - 0
internal/config/config.go

@@ -28,6 +28,7 @@ import (
 const (
 const (
 	OldestHandledVersion = 5
 	OldestHandledVersion = 5
 	CurrentVersion       = 10
 	CurrentVersion       = 10
+	MaxRescanIntervalS   = 365 * 24 * 60 * 60
 )
 )
 
 
 type Configuration struct {
 type Configuration struct {
@@ -330,6 +331,12 @@ func (cfg *Configuration) prepare(myID protocol.DeviceID) {
 			folder.ID = "default"
 			folder.ID = "default"
 		}
 		}
 
 
+		if folder.RescanIntervalS > MaxRescanIntervalS {
+			folder.RescanIntervalS = MaxRescanIntervalS
+		} else if folder.RescanIntervalS < 0 {
+			folder.RescanIntervalS = 0
+		}
+
 		if seen, ok := seenFolders[folder.ID]; ok {
 		if seen, ok := seenFolders[folder.ID]; ok {
 			l.Warnf("Multiple folders with ID %q; disabling", folder.ID)
 			l.Warnf("Multiple folders with ID %q; disabling", folder.ID)
 
 

+ 14 - 0
internal/config/config_test.go

@@ -578,3 +578,17 @@ func TestPullOrder(t *testing.T) {
 		}
 		}
 	}
 	}
 }
 }
+
+func TestLargeRescanInterval(t *testing.T) {
+	wrapper, err := Load("testdata/largeinterval.xml", device1)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if wrapper.Folders()["l1"].RescanIntervalS != MaxRescanIntervalS {
+		t.Error("too large rescan interval should be maxed out")
+	}
+	if wrapper.Folders()["l2"].RescanIntervalS != 0 {
+		t.Error("negative rescan interval should become zero")
+	}
+}

+ 4 - 0
internal/config/testdata/largeinterval.xml

@@ -0,0 +1,4 @@
+<configuration version="10">
+    <folder id="l1" path="~/Sync" rescanIntervalS="60000000000"></folder>
+    <folder id="l2" path="~/Sync" rescanIntervalS="-1"></folder>
+</configuration>