lib/model: Accept scan requests of paths ending in slash (fixes #3804)

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/3805
This commit is contained in:
Jakob Borg 2016-12-16 11:21:22 +00:00
parent b279e261a1
commit 11b35d650d
2 changed files with 19 additions and 1 deletions

View File

@ -1690,7 +1690,10 @@ func (m *Model) internalScanFolderSubdirs(folder string, subDirs []string) error
for i, sub := range subDirs {
sub = osutil.NativeFilename(sub)
// We test each path by joining with "root". What we join with is
// not relevant, we just want the dotdot escape detection here.
// not relevant, we just want the dotdot escape detection here. For
// historical reasons we may get paths that end in a slash. We
// remove that first to allow the rootedJoinedPath to pass.
sub = strings.TrimRight(sub, string(os.PathSeparator))
if _, err := rootedJoinedPath("root", sub); err != nil {
return errors.New("invalid subpath")
}

View File

@ -2166,6 +2166,21 @@ func TestIssue3496(t *testing.T) {
}
}
func TestIssue3804(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()
// Subdirs ending in slash should be accepted
if err := m.ScanFolderSubdirs("default", []string{"baz/", "foo"}); err != nil {
t.Error("Unexpected error:", err)
}
}
func TestRootedJoinedPath(t *testing.T) {
type testcase struct {
root string