bug fixed: memory leak in pkey.go

This commit is contained in:
X-Hawk
2019-10-23 16:03:09 +08:00
parent eba487efd3
commit 3f36b039a2

View File

@@ -672,6 +672,8 @@ func GeneratePrivateKey(alg string, args [][2]string, eng *Engine) (*PrivateKey,
defer C.free(unsafe.Pointer(calg)) defer C.free(unsafe.Pointer(calg))
ctx := C.new_pkey_keygen_ctx(calg, nil) ctx := C.new_pkey_keygen_ctx(calg, nil)
defer C.EVP_PKEY_CTX_free(ctx)
/* /*
if eng != nil { if eng != nil {
ctx := C.new_pkey_keygen_ctx(calg, eng.engine) ctx := C.new_pkey_keygen_ctx(calg, eng.engine)
@@ -890,6 +892,7 @@ func (pk *PublicKey) Encrypt(alg string, in []byte, eng *Engine) ([]byte, error)
if out == nil { if out == nil {
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(out))
return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil
} }
@@ -902,6 +905,7 @@ func (sk *PrivateKey) Decrypt(alg string, in []byte, eng *Engine) ([]byte, error
if out == nil { if out == nil {
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(out))
return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil return C.GoBytes(unsafe.Pointer(out), C.int(outlen)), nil
} }
@@ -915,6 +919,7 @@ func (sk *PrivateKey) Sign(alg string, dgst []byte, eng *Engine) ([]byte, error)
C.ERR_print_errors_fp(C.stderr) C.ERR_print_errors_fp(C.stderr)
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(sig))
return C.GoBytes(unsafe.Pointer(sig), C.int(siglen)), nil return C.GoBytes(unsafe.Pointer(sig), C.int(siglen)), nil
} }
@@ -938,6 +943,7 @@ func (sk *PrivateKey) DeriveKey(alg string, peer PublicKey, eng *Engine) ([]byte
if key == nil { if key == nil {
return nil, GetErrors() return nil, GetErrors()
} }
defer C.free(unsafe.Pointer(key))
return C.GoBytes(unsafe.Pointer(key), C.int(keylen)), nil return C.GoBytes(unsafe.Pointer(key), C.int(keylen)), nil
} }