提交 0c9de428 编写于 作者: D Dr. Stephen Henson

In {RSA,DSA,DH}_new_method(x) need to increase the reference

count of the ENGINE is x is not NULL since it will be freed
in {RSA,DSA,DH}_free().
上级 f13def50
...@@ -142,16 +142,21 @@ DH *DH_new_method(ENGINE *engine) ...@@ -142,16 +142,21 @@ DH *DH_new_method(ENGINE *engine)
DHerr(DH_F_DH_NEW,ERR_R_MALLOC_FAILURE); DHerr(DH_F_DH_NEW,ERR_R_MALLOC_FAILURE);
return(NULL); return(NULL);
} }
if(engine)
ret->engine = engine; if (engine)
{
if(ENGINE_init(engine))
ret->engine = engine;
else
ret->engine = NULL;
}
else else
ret->engine=ENGINE_get_default_DH();
if(ret->engine == NULL)
{ {
if((ret->engine=ENGINE_get_default_DH()) == NULL) DHerr(DH_F_DH_NEW,ERR_LIB_ENGINE);
{ OPENSSL_free(ret);
DHerr(DH_F_DH_NEW,ERR_LIB_ENGINE); return NULL;
OPENSSL_free(ret);
return NULL;
}
} }
meth = ENGINE_get_DH(ret->engine); meth = ENGINE_get_DH(ret->engine);
ret->pad=0; ret->pad=0;
......
...@@ -146,17 +146,24 @@ DSA *DSA_new_method(ENGINE *engine) ...@@ -146,17 +146,24 @@ DSA *DSA_new_method(ENGINE *engine)
DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE); DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE);
return(NULL); return(NULL);
} }
if(engine)
ret->engine = engine; if (engine)
{
if(ENGINE_init(engine))
ret->engine = engine;
else
ret->engine = NULL;
}
else else
ret->engine=ENGINE_get_default_DSA();
if(ret->engine == NULL)
{ {
if((ret->engine=ENGINE_get_default_DSA()) == NULL) DSAerr(DSA_F_DSA_NEW,ERR_LIB_ENGINE);
{ OPENSSL_free(ret);
DSAerr(DSA_F_DSA_NEW,ERR_LIB_ENGINE); return NULL;
OPENSSL_free(ret);
return NULL;
}
} }
meth = ENGINE_get_DSA(ret->engine); meth = ENGINE_get_DSA(ret->engine);
ret->pad=0; ret->pad=0;
ret->version=0; ret->version=0;
......
...@@ -162,17 +162,23 @@ RSA *RSA_new_method(ENGINE *engine) ...@@ -162,17 +162,23 @@ RSA *RSA_new_method(ENGINE *engine)
return(NULL); return(NULL);
} }
if (engine == NULL) if (engine)
{ {
if((ret->engine=ENGINE_get_default_RSA()) == NULL) if(ENGINE_init(engine))
{ ret->engine = engine;
RSAerr(RSA_F_RSA_NEW_METHOD,ERR_LIB_ENGINE); else
OPENSSL_free(ret); ret->engine = NULL;
return NULL;
}
} }
else else
ret->engine=engine; ret->engine=ENGINE_get_default_RSA();
if(ret->engine == NULL)
{
RSAerr(RSA_F_RSA_NEW_METHOD,ERR_LIB_ENGINE);
OPENSSL_free(ret);
return NULL;
}
meth = ENGINE_get_RSA(ret->engine); meth = ENGINE_get_RSA(ret->engine);
ret->pad=0; ret->pad=0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册