From 702ed8ecc19edfd53a45b11df66c67e940e8637b Mon Sep 17 00:00:00 2001 From: Hazem Krimi Date: Fri, 9 May 2025 06:40:32 +0100 Subject: [PATCH] fix(config): deep copy configuration defaults (fixes #9916) (#10101) ### Purpose Setting default configuration was not working properly since the defaults struct is not deeply copied. ### Testing Try running commands to change default configuration and either inspect `config.xml` or `/rest/config` result to see the applied changed. Example: ``` ./syncthing cli config defaults folder versioning params set keep 5 ``` --- lib/config/config.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/config/config.go b/lib/config/config.go index e3d9f11c9..73c48ecd0 100644 --- a/lib/config/config.go +++ b/lib/config/config.go @@ -235,6 +235,10 @@ func ReadJSON(r io.Reader, myID protocol.DeviceID) (Configuration, error) { func (cfg Configuration) Copy() Configuration { newCfg := cfg + // Deep copy Defaults + newCfg.Defaults.Folder = cfg.Defaults.Folder.Copy() + newCfg.Defaults.Device = cfg.Defaults.Device.Copy() + // Deep copy FolderConfigurations newCfg.Folders = make([]FolderConfiguration, len(cfg.Folders)) for i := range newCfg.Folders {