lib/protocol: Handle slashified paths in IsEncryptedParent (fixes #7184) (#7187)

This commit is contained in:
Simon Frei 2020-12-09 18:16:14 +01:00 committed by GitHub
parent 4198b5061f
commit 8fd6b1d428
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 4 deletions

View File

@ -538,9 +538,8 @@ func IsEncryptedParent(path string) bool {
}
func isEncryptedParentFromComponents(pathComponents []string) bool {
if l := len(pathComponents); l > 2 {
return false
} else if l == 2 && len(pathComponents[1]) != 2 {
l := len(pathComponents)
if l == 2 && len(pathComponents[1]) != 2 {
return false
} else if l == 0 {
return false
@ -548,5 +547,16 @@ func isEncryptedParentFromComponents(pathComponents []string) bool {
if len(pathComponents[0]) == 0 {
return false
}
return pathComponents[0][1:] == encryptedDirExtension
if pathComponents[0][1:] != encryptedDirExtension {
return false
}
if l < 2 {
return true
}
for _, comp := range pathComponents[2:] {
if len(comp) != maxPathComponent {
return false
}
}
return true
}

View File

@ -11,6 +11,8 @@ import (
"reflect"
"strings"
"testing"
"github.com/syncthing/syncthing/lib/rand"
)
func TestEnDecryptName(t *testing.T) {
@ -97,6 +99,7 @@ func TestEnDecryptFileInfo(t *testing.T) {
}
func TestIsEncryptedParent(t *testing.T) {
comp := rand.String(maxPathComponent)
cases := []struct {
path string
is bool
@ -111,6 +114,10 @@ func TestIsEncryptedParent(t *testing.T) {
{"1" + encryptedDirExtension + "/bcd", false},
{"1" + encryptedDirExtension + "/bc/foo", false},
{"1.12/22", false},
{"1" + encryptedDirExtension + "/bc/" + comp, true},
{"1" + encryptedDirExtension + "/bc/" + comp + "/" + comp, true},
{"1" + encryptedDirExtension + "/bc/" + comp + "a", false},
{"1" + encryptedDirExtension + "/bc/" + comp + "/a/" + comp, false},
}
for _, tc := range cases {
if res := IsEncryptedParent(tc.path); res != tc.is {