Don't add empty device to config on init (#8933)

We usually want to ensure that our own device is present. However if the
given device ID is the empty ID, we shouldn't do that. This is a
legimate (though way too non-obvious) use-case when opening the config
without knowing/caring about the device ID.
This commit is contained in:
Simon Frei 2023-06-10 22:33:39 +02:00 committed by GitHub
parent a972811f54
commit bf6ffbbd67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 0 deletions

View File

@ -268,6 +268,9 @@ func (cfg *Configuration) prepare(myID protocol.DeviceID) error {
} }
func (cfg *Configuration) ensureMyDevice(myID protocol.DeviceID) { func (cfg *Configuration) ensureMyDevice(myID protocol.DeviceID) {
if myID == protocol.EmptyDeviceID {
return
}
for _, device := range cfg.Devices { for _, device := range cfg.Devices {
if device.DeviceID == myID { if device.DeviceID == myID {
return return
@ -483,6 +486,9 @@ func (cfg *Configuration) SetFolders(folders []FolderConfiguration) {
} }
func ensureDevicePresent(devices []FolderDeviceConfiguration, myID protocol.DeviceID) []FolderDeviceConfiguration { func ensureDevicePresent(devices []FolderDeviceConfiguration, myID protocol.DeviceID) []FolderDeviceConfiguration {
if myID == protocol.EmptyDeviceID {
return devices
}
for _, device := range devices { for _, device := range devices {
if device.DeviceID.Equals(myID) { if device.DeviceID.Equals(myID) {
return devices return devices

View File

@ -1489,6 +1489,36 @@ func TestXattrFilter(t *testing.T) {
} }
} }
// Verify that opening a config with myID == protocol.EmptyDeviceID doesn't add that ID to the config.
// Done in various places where config is needed, but the device ID isn't known.
func TestLoadEmptyDeviceID(t *testing.T) {
temp, err := copyToTmp(testFs, "example.xml")
if err != nil {
t.Fatal(err)
}
fd, err := testFs.Open(temp)
if err != nil {
t.Fatal(err)
}
defer fd.Close()
cfg, _, err := ReadXML(fd, protocol.EmptyDeviceID)
if err != nil {
t.Fatal(err)
}
for _, devCfg := range cfg.Devices {
if devCfg.DeviceID == protocol.EmptyDeviceID {
t.Fatal("Device with empty ID")
}
}
for _, folderCfg := range cfg.Folders {
for _, devCfg := range folderCfg.Devices {
if devCfg.DeviceID == protocol.EmptyDeviceID {
t.Fatalf("Device with empty ID in folder %v", folderCfg.Description())
}
}
}
}
func loadTestFiles() { func loadTestFiles() {
entries, err := os.ReadDir("testdata") entries, err := os.ReadDir("testdata")
if err != nil { if err != nil {