A number of the METHOD functions weren't properly handling malloc failures.
Reviewed-by: Richard Levitte <levitte@openssl.org>
if (dhm != NULL) {
dhm->name = OPENSSL_strdup(name);
+ if (dhm->name == NULL) {
+ OPENSSL_free(dhm);
+ return NULL;
+ }
dhm->flags = flags;
}
if (ret != NULL) {
memcpy(ret, dhm, sizeof(*dhm));
ret->name = OPENSSL_strdup(dhm->name);
+ if (ret->name == NULL) {
+ OPENSSL_free(ret);
+ return NULL;
+ }
}
return ret;
int DH_meth_set1_name(DH_METHOD *dhm, const char *name)
{
+ char *tmpname;
+
+ tmpname = OPENSSL_strdup(name);
+ if (tmpname == NULL)
+ return 0;
+
OPENSSL_free(dhm->name);
- dhm->name = OPENSSL_strdup(name);
+ dhm->name = tmpname;
- return dhm->name != NULL;
+ return 1;
}
int DH_meth_get_flags(DH_METHOD *dhm)
if (dsam != NULL) {
dsam->name = OPENSSL_strdup(name);
+ if (dsam->name == NULL) {
+ OPENSSL_free(dsam);
+ return NULL;
+ }
dsam->flags = flags;
}
if (ret != NULL) {
memcpy(ret, dsam, sizeof(*dsam));
ret->name = OPENSSL_strdup(dsam->name);
+ if (ret->name == NULL) {
+ OPENSSL_free(ret);
+ return NULL;
+ }
}
return ret;
int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name)
{
+ char *tmpname;
+
+ tmpname = OPENSSL_strdup(name);
+ if (tmpname == NULL)
+ return 0;
+
OPENSSL_free(dsam->name);
- dsam->name = OPENSSL_strdup(name);
+ dsam->name = tmpname;
- return dsam->name != NULL;
+ return 1;
}
int DSA_meth_get_flags(DSA_METHOD *dsam)
if (meth != NULL) {
meth->name = OPENSSL_strdup(name);
+ if (meth->name == NULL) {
+ OPENSSL_free(meth);
+ return NULL;
+ }
meth->flags = flags;
}
if (ret != NULL) {
memcpy(ret, meth, sizeof(*meth));
ret->name = OPENSSL_strdup(meth->name);
+ if (ret->name == NULL) {
+ OPENSSL_free(ret);
+ return NULL;
+ }
}
return ret;
int RSA_meth_set1_name(RSA_METHOD *meth, const char *name)
{
+ char *tmpname;
+
+ tmpname = OPENSSL_strdup(name);
+ if (tmpname == NULL)
+ return 0;
+
OPENSSL_free(meth->name);
- meth->name = OPENSSL_strdup(name);
+ meth->name = tmpname;
- return meth->name != NULL;
+ return 1;
}
int RSA_meth_get_flags(RSA_METHOD *meth)
{
UI_METHOD *ui_method = OPENSSL_zalloc(sizeof(*ui_method));
- if (ui_method != NULL)
+ if (ui_method != NULL) {
ui_method->name = OPENSSL_strdup(name);
+ if (ui_method->name == NULL) {
+ OPENSSL_free(ui_method);
+ return NULL;
+ }
+ }
return ui_method;
}