lib/model: Allow empty subdirs in scan request (fixes #3829)

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3833
This commit is contained in:
Jakob Borg 2016-12-21 10:33:07 +00:00
parent 0437f6dd66
commit f0efa2b974
2 changed files with 25 additions and 2 deletions

View File

@ -1705,8 +1705,16 @@ func (m *Model) ScanFolderSubdirs(folder string, subs []string) error {
}
func (m *Model) internalScanFolderSubdirs(folder string, subDirs []string) error {
for i, sub := range subDirs {
sub = osutil.NativeFilename(sub)
for i := 0; i < len(subDirs); i++ {
sub := osutil.NativeFilename(subDirs[i])
if sub == "" {
// A blank subdirs means to scan the entire folder. We can trim
// the subDirs list and go on our way.
subDirs = nil
break
}
// We test each path by joining with "root". What we join with is
// not relevant, we just want the dotdot escape detection here. For
// historical reasons we may get paths that end in a slash. We

View File

@ -2181,6 +2181,21 @@ func TestIssue3804(t *testing.T) {
}
}
func TestIssue3829(t *testing.T) {
dbi := db.OpenMemory()
m := NewModel(defaultConfig, protocol.LocalDeviceID, "device", "syncthing", "dev", dbi, nil)
m.AddFolder(defaultFolderConfig)
m.StartFolder("default")
m.ServeBackground()
defer m.Stop()
// Empty subdirs should be accepted
if err := m.ScanFolderSubdirs("default", []string{""}); err != nil {
t.Error("Unexpected error:", err)
}
}
func TestRootedJoinedPath(t *testing.T) {
type testcase struct {
root string