Backfit a bugfix from 0.9.7-dev to 0.9.6-stable. init() and finish()
handlers were previously getting called before (and after, respectively) the "ex_data" structures - this meant init() had very little that it could initialise, and finish() had very little it could cleanup.
This commit is contained in:
@@ -125,13 +125,13 @@ DSA *DSA_new_method(DSA_METHOD *meth)
|
||||
|
||||
ret->references=1;
|
||||
ret->flags=ret->meth->flags;
|
||||
CRYPTO_new_ex_data(dsa_meth,ret,&ret->ex_data);
|
||||
if ((ret->meth->init != NULL) && !ret->meth->init(ret))
|
||||
{
|
||||
CRYPTO_free_ex_data(dsa_meth,ret,&ret->ex_data);
|
||||
OPENSSL_free(ret);
|
||||
ret=NULL;
|
||||
}
|
||||
else
|
||||
CRYPTO_new_ex_data(dsa_meth,ret,&ret->ex_data);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
@@ -155,10 +155,10 @@ void DSA_free(DSA *r)
|
||||
}
|
||||
#endif
|
||||
|
||||
CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data);
|
||||
|
||||
if(r->meth->finish) r->meth->finish(r);
|
||||
|
||||
CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data);
|
||||
|
||||
if (r->p != NULL) BN_clear_free(r->p);
|
||||
if (r->q != NULL) BN_clear_free(r->q);
|
||||
if (r->g != NULL) BN_clear_free(r->g);
|
||||
|
Reference in New Issue
Block a user