@cryptotaxi247 / kubo / commits / d1da1d40c

fix(repo/config) validate against struct before writing to disk

When setting config keys, the program doesn't know whether the key-to-be-modified exists on the Config struct. (Perhaps, with reflection, it is possible to find the field). To allow callers to write non-existent keys, the program would... Before: 1) converts the in-memory *Config to a map 2) sets the key on the map, and 3) writes this map to disk. 4) Then, it converts this map back into an in-memory struct. This commit swaps 3 and 4 so the map can be validated against the struct before being written to disk. This prevents the bug identified in #740.

Brian Tiger Chow committed Feb 3, 2015 at 16:52 UTC d1da1d40c218d9953a304f3f599ee274e3919d5e
1 file changed +3 -5
repo/fsrepo/component/config.go
+3 -5
@@ -93,15 +93,13 @@ func (c *ConfigComponent) SetConfigKey(key string, value interface{}) error {
93 if err := common.MapSetKV(mapconf, key, value); err != nil {
94 return err
95 }
96 - if err := serialize.WriteConfigFile(filename, mapconf); err != nil {
97 - return err
98 - }
99 - // in order to get the updated values, read updated config from the
100 - // file-system.
96 conf, err := config.FromMap(mapconf)
97 if err != nil {
98 return err
99 }
100 + if err := serialize.WriteConfigFile(filename, mapconf); err != nil {
101 + return err
102 + }
103 return c.setConfigUnsynced(conf) // TODO roll this into this method
104 }
105