EVP_MD_CTX is allocated using EVP_MD_CTX_new() but was never freed.
ctx should be initialized to NULL otherwise EVP_MD_CTX_free(ctx) could
segfault.
---
 src/jws.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/jws.c b/src/jws.c
index d83ce9b96..7a4d83e6f 100644
--- a/src/jws.c
+++ b/src/jws.c
@@ -356,7 +356,7 @@ enum jwt_alg EVP_PKEY_to_jws_alg(EVP_PKEY *pkey)
  */
 size_t jws_b64_signature(EVP_PKEY *pkey, enum jwt_alg alg, char *b64protected, 
char *b64payload, char *dst, size_t dsize)
 {
-       EVP_MD_CTX *ctx;
+       EVP_MD_CTX *ctx = NULL;
        const EVP_MD *evp_md = NULL;
        int ret = 0;
        struct buffer *sign = NULL;
@@ -450,6 +450,7 @@ size_t jws_b64_signature(EVP_PKEY *pkey, enum jwt_alg alg, 
char *b64protected, c
        ret = a2base64url(sign->area, sign->data, dst, dsize);
 
 out:
+       EVP_MD_CTX_free(ctx);
        free_trash_chunk(sign);
 
        if (ret > 0)
-- 
2.52.0


Reply via email to