#include "dh_locl.h"
#include <string.h>
+#include <openssl/err.h>
DH_METHOD *DH_meth_new(const char *name, int flags)
{
if (dhm != NULL) {
dhm->name = OPENSSL_strdup(name);
+ if (dhm->name == NULL) {
+ OPENSSL_free(dhm);
+ DHerr(DH_F_DH_METH_NEW, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
dhm->flags = flags;
}
void DH_meth_free(DH_METHOD *dhm)
{
if (dhm != NULL) {
- if (dhm->name != NULL)
- OPENSSL_free(dhm->name);
+ OPENSSL_free(dhm->name);
OPENSSL_free(dhm);
}
}
if (ret != NULL) {
memcpy(ret, dhm, sizeof(*dhm));
ret->name = OPENSSL_strdup(dhm->name);
+ if (ret->name == NULL) {
+ OPENSSL_free(ret);
+ DHerr(DH_F_DH_METH_DUP, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
}
return ret;
int DH_meth_set1_name(DH_METHOD *dhm, const char *name)
{
+ char *tmpname;
+
+ tmpname = OPENSSL_strdup(name);
+ if (tmpname == NULL) {
+ DHerr(DH_F_DH_METH_SET1_NAME, ERR_R_MALLOC_FAILURE);
+ 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)