add malloc fail check & fix memory leak
[openssl.git] / test / gost2814789test.c
index 4569249e9ab41596ae1c8abcddbb3fb3bde7700f..2ab0782f8063dfb8043d6896e5be5552e8a3ea71 100644 (file)
@@ -8,6 +8,7 @@
  * ====================================================================
  */
 #include <stdio.h>
+#include <openssl/e_os2.h>
 
 #if defined(OPENSSL_NO_ENGINE) || defined(OPENSSL_NO_GOST)
 int main(int argc, char *argv[])
@@ -78,7 +79,7 @@ typedef struct g89_tc_ {
      */
 } g89_tc;
 
-const g89_tc tcs[] = {
+static const g89_tc tcs[] = {
     /*
      * GOST R 34.11-94 Test cases
      */
@@ -1206,7 +1207,7 @@ int main(int argc, char *argv[])
     u64 ullMaxLen = 6 * 1000 * 1000;
     int ignore = 0;
     ENGINE *impl = NULL;
-    EVP_MD_CTX mctx;
+    EVP_MD_CTX *mctx;
     EVP_CIPHER_CTX ectx;
     EVP_PKEY *mac_key;
     byte bDerive[EVP_MAX_KEY_LENGTH];
@@ -1390,27 +1391,33 @@ int main(int argc, char *argv[])
                  */
                 continue;
             }
-            EVP_MD_CTX_init(&mctx);
+            mctx = EVP_MD_CTX_new();
+            if (mctx == NULL) {
+                fflush(NULL);
+                fprintf(stderr, "ENGINE_ctrl_cmd_string: malloc failure\n");
+                return 14;
+            }
             mac_key = EVP_PKEY_new_mac_key(NID_id_Gost28147_89_MAC, NULL,
                                            bDerive, mdl);
-            EVP_DigestSignInit(&mctx, NULL, md_g89imit, impl, mac_key);
+            EVP_DigestSignInit(mctx, NULL, md_g89imit, impl, mac_key);
             if (G89_MAX_TC_LEN >= tcs[t].ullLen) {
-                EVP_DigestSignUpdate(&mctx, tcs[t].bIn,
+                EVP_DigestSignUpdate(mctx, tcs[t].bIn,
                                      (unsigned int)tcs[t].ullLen);
             } else {
                 for (ullLeft = tcs[t].ullLen;
                      ullLeft >= sizeof(bZB); ullLeft -= sizeof(bZB)) {
                     printf("B");
                     fflush(NULL);
-                    EVP_DigestSignUpdate(&mctx, bZB, sizeof(bZB));
+                    EVP_DigestSignUpdate(mctx, bZB, sizeof(bZB));
                 }
                 printf("b" FMT64 "/" FMT64, ullLeft, tcs[t].ullLen);
                 fflush(NULL);
-                EVP_DigestSignUpdate(&mctx, bZB, (unsigned int)ullLeft);
+                EVP_DigestSignUpdate(mctx, bZB, (unsigned int)ullLeft);
             }
             siglen = 4;
-            OPENSSL_assert(EVP_DigestSignFinal(&mctx, bTest, &siglen));
-            EVP_MD_CTX_cleanup(&mctx);
+            OPENSSL_assert(EVP_DigestSignFinal(mctx, bTest, &siglen));
+            EVP_PKEY_free(mac_key);
+            EVP_MD_CTX_free(mctx);
             enlu = (int)tcs[t].ullLen;
             enlf = 0;
             l = siglen;
@@ -1433,6 +1440,8 @@ int main(int argc, char *argv[])
     printf(" passed\n");
     fflush(NULL);
 
+    NCONF_free(pConfig);
+
     return EXIT_SUCCESS;
 }
 #endif