fix: cosmovisor: fix (*Config.SetCurrentUpgrade file leak on failed JSON marshal+write (#12750)

This commit is contained in:
Emmanuel T Odeke 2022-07-27 12:17:16 -06:00 committed by GitHub
parent a8a52d0775
commit 37e765daa6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -271,7 +271,7 @@ func (cfg *Config) validate() []error {
}
// SetCurrentUpgrade sets the named upgrade to be the current link, returns error if this binary doesn't exist
func (cfg *Config) SetCurrentUpgrade(u upgradetypes.Plan) error {
func (cfg *Config) SetCurrentUpgrade(u upgradetypes.Plan) (rerr error) {
// ensure named upgrade exists
bin := cfg.UpgradeBin(u.Name)
@ -299,14 +299,19 @@ func (cfg *Config) SetCurrentUpgrade(u upgradetypes.Plan) error {
if err != nil {
return err
}
defer func() {
cerr := f.Close()
if rerr == nil {
rerr = cerr
}
}()
bz, err := json.Marshal(u)
if err != nil {
return err
}
if _, err := f.Write(bz); err != nil {
return err
}
return f.Close()
_, err = f.Write(bz)
return err
}
func (cfg *Config) UpgradeInfo() (upgradetypes.Plan, error) {