From 56228352ca1509f1d6dc7300c21c23bb7e0c0b12 Mon Sep 17 00:00:00 2001 From: daisicheng Date: Thu, 18 Aug 2022 19:22:56 +0800 Subject: [PATCH 3/3] fix the possible file leakage problem in util/cipher.go --- util/cipher.go | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/util/cipher.go b/util/cipher.go index c6fa555..193ca69 100644 --- a/util/cipher.go +++ b/util/cipher.go @@ -83,37 +83,42 @@ func DecryptRSA(data string, key *rsa.PrivateKey, h crypto.Hash) (string, error) } // GenRSAPublicKeyFile store public key from rsa key pair into local file -func GenRSAPublicKeyFile(key *rsa.PrivateKey, path string) error { - if exist, err := IsExist(path); err != nil { - return err +func GenRSAPublicKeyFile(key *rsa.PrivateKey, path string) (err error) { + var exist bool + if exist, err = IsExist(path); err != nil { + return } else if exist { - if err := os.Remove(path); err != nil { + if err = os.Remove(path); err != nil { return errors.Errorf("failed to delete the residual key file: %v", err) } } publicKey := &key.PublicKey - stream, err := x509.MarshalPKIXPublicKey(publicKey) + var stream []byte + stream, err = x509.MarshalPKIXPublicKey(publicKey) if err != nil { - return err + return } block := &pem.Block{ Type: "RSA PUBLIC KEY", Bytes: stream, } - file, err := os.Create(path) + var file *os.File + file, err = os.Create(path) if err != nil { - return err + return } - if err := os.Chmod(path, constant.DefaultReadOnlyFileMode); err != nil { - return err - } - if err := pem.Encode(file, block); err != nil { - return err + defer func() { + cErr := file.Close() + if cErr != nil && err == nil { + err = cErr + } + }() + if err = file.Chmod(constant.DefaultReadOnlyFileMode); err != nil { + return } - if cErr := file.Close(); cErr != nil { - return cErr + if err = pem.Encode(file, block); err != nil { + return } - return nil } -- 2.33.0