Fix memory leak. The canonical X509_NAME_ENTRY STACK is reallocated rather
[openssl.git] / apps / dgst.c
index 67bc8d382a03056fa0c16e5e8f0565b41fcb68dd..96e72c6657e7e0ebc0f53b5531910f693a5ef899 100644 (file)
@@ -107,7 +107,7 @@ int MAIN(int argc, char **argv)
 #endif
        char *hmac_key=NULL;
        char *mac_name=NULL;
-       STACK *sigopts = NULL, *macopts = NULL;
+       STACK_OF(STRING) *sigopts = NULL, *macopts = NULL;
 
        apps_startup();
 
@@ -210,8 +210,8 @@ int MAIN(int argc, char **argv)
                        if (--argc < 1)
                                break;
                        if (!sigopts)
-                               sigopts = sk_new_null();
-                       if (!sigopts || !sk_push(sigopts, *(++argv)))
+                               sigopts = sk_STRING_new_null();
+                       if (!sigopts || !sk_STRING_push(sigopts, *(++argv)))
                                break;
                        }
                else if (strcmp(*argv,"-macopt") == 0)
@@ -219,8 +219,8 @@ int MAIN(int argc, char **argv)
                        if (--argc < 1)
                                break;
                        if (!macopts)
-                               macopts = sk_new_null();
-                       if (!macopts || !sk_push(macopts, *(++argv)))
+                               macopts = sk_STRING_new_null();
+                       if (!macopts || !sk_STRING_push(macopts, *(++argv)))
                                break;
                        }
                else if ((m=EVP_get_digestbyname(&((*argv)[1]))) != NULL)
@@ -252,6 +252,7 @@ int MAIN(int argc, char **argv)
                BIO_printf(bio_err,"-signature file signature to verify\n");
                BIO_printf(bio_err,"-sigopt nm:v    signature parameter\n");
                BIO_printf(bio_err,"-binary         output in binary form\n");
+               BIO_printf(bio_err,"-hmac key       create hashed MAC with key\n");
 #ifndef OPENSSL_NO_ENGINE
                BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");
 #endif
@@ -286,7 +287,7 @@ int MAIN(int argc, char **argv)
                BIO_printf(bio_err,"-%-14s to use the %s message digest algorithm\n",
                        SN_whirlpool,SN_whirlpool);
 #endif
-               err=1;
+               goto end;
                }
 
        in=BIO_new(BIO_s_file());
@@ -371,9 +372,9 @@ int MAIN(int argc, char **argv)
                if (macopts)
                        {
                        char *macopt;
-                       for (i = 0; i < sk_num(macopts); i++)
+                       for (i = 0; i < sk_STRING_num(macopts); i++)
                                {
-                               macopt = sk_value(macopts, i);
+                               macopt = sk_STRING_value(macopts, i);
                                if (pkey_ctrl_string(mac_ctx, macopt) <= 0)
                                        {
                                        BIO_printf(bio_err,
@@ -430,9 +431,9 @@ int MAIN(int argc, char **argv)
                if (sigopts)
                        {
                        char *sigopt;
-                       for (i = 0; i < sk_num(sigopts); i++)
+                       for (i = 0; i < sk_STRING_num(sigopts); i++)
                                {
-                               sigopt = sk_value(sigopts, i);
+                               sigopt = sk_STRING_value(sigopts, i);
                                if (pkey_ctrl_string(pctx, sigopt) <= 0)
                                        {
                                        BIO_printf(bio_err,
@@ -537,9 +538,9 @@ end:
        BIO_free_all(out);
        EVP_PKEY_free(sigkey);
        if (sigopts)
-               sk_free(sigopts);
+               sk_STRING_free(sigopts);
        if (macopts)
-               sk_free(macopts);
+               sk_STRING_free(macopts);
        if(sigbuf) OPENSSL_free(sigbuf);
        if (bmd != NULL) BIO_free(bmd);
        apps_shutdown();