Fix the effect of no-dso in crypto/init.c
[oweals/openssl.git] / crypto / dh / dh_meth.c
index 11fd8e38d0ce70c31c137dd1c99b4639725c1153..45753b6164bddc836e11cab612bb61d22bd2ee19 100644 (file)
@@ -9,6 +9,7 @@
 
 #include "dh_locl.h"
 #include <string.h>
+#include <openssl/err.h>
 
 DH_METHOD *DH_meth_new(const char *name, int flags)
 {
@@ -16,6 +17,11 @@ 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;
     }
 
@@ -25,8 +31,7 @@ DH_METHOD *DH_meth_new(const char *name, int 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);
     }
 }
@@ -40,6 +45,11 @@ DH_METHOD *DH_meth_dup(const DH_METHOD *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;
@@ -52,10 +62,18 @@ const char *DH_meth_get0_name(const DH_METHOD *dhm)
 
 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)