Don't ignore return values of EVP_DigestInit_ex() in md BIOs and dgst.
authorDr. Stephen Henson <steve@openssl.org>
Thu, 5 Aug 2004 18:10:46 +0000 (18:10 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Thu, 5 Aug 2004 18:10:46 +0000 (18:10 +0000)
apps/dgst.c
crypto/evp/bio_md.c

index 8b4ec7f2e2a80885745062277df1cc9cda38c342..f8d9a70f2339cebb1cc096fd6d24f2a14931c3f2 100644 (file)
@@ -330,7 +330,13 @@ int MAIN(int argc, char **argv)
        }
 
        /* we use md as a filter, reading from 'in' */
-       BIO_set_md(bmd,md);
+       if (!BIO_set_md(bmd,md))
+               {
+               BIO_printf(bio_err, "Error setting digest %s\n", pname);
+               ERR_print_errors(bio_err);
+               goto end;
+               }
+               
        inp=BIO_push(bmd,in);
 
        if (argc == 0)
index 53f1f56cade650f091d01acda083ee16dee47e4f..e4a4d663cb2e18a50648bd30e11b3773c0978763 100644 (file)
@@ -176,10 +176,11 @@ static long md_ctrl(BIO *b, int cmd, long num, void *ptr)
                {
        case BIO_CTRL_RESET:
                if (b->init)
-                       EVP_DigestInit_ex(ctx,ctx->digest, NULL);
+                       ret = EVP_DigestInit_ex(ctx,ctx->digest, NULL);
                else
                        ret=0;
-               ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
+               if (ret > 0)
+                       ret=BIO_ctrl(b->next_bio,cmd,num,ptr);
                break;
        case BIO_C_GET_MD:
                if (b->init)
@@ -213,8 +214,9 @@ static long md_ctrl(BIO *b, int cmd, long num, void *ptr)
 
        case BIO_C_SET_MD:
                md=ptr;
-               EVP_DigestInit_ex(ctx,md, NULL);
-               b->init=1;
+               ret = EVP_DigestInit_ex(ctx,md, NULL);
+               if (ret > 0)
+                       b->init=1;
                break;
        case BIO_CTRL_DUP:
                dbio=ptr;