Submitted by: Dmitry Ivanov <vonami@gmail.com>

Don't leave dangling pointers in GOST engine if calls fail.
This commit is contained in:
Dr. Stephen Henson 2010-02-16 14:30:29 +00:00
parent 8d934c2585
commit 439aab3afc

View File

@ -136,12 +136,14 @@ DSA_SIG *gost2001_do_sign(const unsigned char *dgst,int dlen, EC_KEY *eckey)
{ {
GOSTerr(GOST_F_GOST2001_DO_SIGN,GOST_R_RANDOM_NUMBER_GENERATOR_FAILED); GOSTerr(GOST_F_GOST2001_DO_SIGN,GOST_R_RANDOM_NUMBER_GENERATOR_FAILED);
DSA_SIG_free(newsig); DSA_SIG_free(newsig);
newsig = NULL;
goto err; goto err;
} }
if (!EC_POINT_mul(group,C,k,NULL,NULL,ctx)) if (!EC_POINT_mul(group,C,k,NULL,NULL,ctx))
{ {
GOSTerr(GOST_F_GOST2001_DO_SIGN,ERR_R_EC_LIB); GOSTerr(GOST_F_GOST2001_DO_SIGN,ERR_R_EC_LIB);
DSA_SIG_free(newsig); DSA_SIG_free(newsig);
newsig = NULL;
goto err; goto err;
} }
if (!X) X=BN_CTX_get(ctx); if (!X) X=BN_CTX_get(ctx);
@ -149,6 +151,7 @@ DSA_SIG *gost2001_do_sign(const unsigned char *dgst,int dlen, EC_KEY *eckey)
{ {
GOSTerr(GOST_F_GOST2001_DO_SIGN,ERR_R_EC_LIB); GOSTerr(GOST_F_GOST2001_DO_SIGN,ERR_R_EC_LIB);
DSA_SIG_free(newsig); DSA_SIG_free(newsig);
newsig = NULL;
goto err; goto err;
} }
if (!r) r=BN_CTX_get(ctx); if (!r) r=BN_CTX_get(ctx);