diff options
| author | inoguchi <> | 2022-03-27 00:37:10 +0000 |
|---|---|---|
| committer | inoguchi <> | 2022-03-27 00:37:10 +0000 |
| commit | 10119456ee7c5d0bf959bd7f60ff3dbb41ac81ca (patch) | |
| tree | 120e72b67e66895610a3e24f5f093980d118caf5 /src | |
| parent | ac8744d51889c42d26769c65c226f6a4ab45da5e (diff) | |
| download | openbsd-10119456ee7c5d0bf959bd7f60ff3dbb41ac81ca.tar.gz openbsd-10119456ee7c5d0bf959bd7f60ff3dbb41ac81ca.tar.bz2 openbsd-10119456ee7c5d0bf959bd7f60ff3dbb41ac81ca.zip | |
Check EVP_Digest* functions return value in openssl(1) ts
Move up md_ctx and add EVP_MD_CTX_free under the 'err:' label.
CID 149810
comment and ok jsing@
Diffstat (limited to 'src')
| -rw-r--r-- | src/usr.bin/openssl/ts.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/usr.bin/openssl/ts.c b/src/usr.bin/openssl/ts.c index a05e9677bc..94da634b45 100644 --- a/src/usr.bin/openssl/ts.c +++ b/src/usr.bin/openssl/ts.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: ts.c,v 1.22 2022/03/24 14:07:08 inoguchi Exp $ */ | 1 | /* $OpenBSD: ts.c,v 1.23 2022/03/27 00:37:10 inoguchi Exp $ */ |
| 2 | /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL | 2 | /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL |
| 3 | * project 2002. | 3 | * project 2002. |
| 4 | */ | 4 | */ |
| @@ -678,13 +678,14 @@ create_digest(BIO *input, char *digest, const EVP_MD *md, | |||
| 678 | unsigned char **md_value) | 678 | unsigned char **md_value) |
| 679 | { | 679 | { |
| 680 | int md_value_len; | 680 | int md_value_len; |
| 681 | EVP_MD_CTX *md_ctx = NULL; | ||
| 681 | 682 | ||
| 682 | md_value_len = EVP_MD_size(md); | 683 | md_value_len = EVP_MD_size(md); |
| 683 | if (md_value_len < 0) | 684 | if (md_value_len < 0) |
| 684 | goto err; | 685 | goto err; |
| 686 | |||
| 685 | if (input != NULL) { | 687 | if (input != NULL) { |
| 686 | /* Digest must be computed from an input file. */ | 688 | /* Digest must be computed from an input file. */ |
| 687 | EVP_MD_CTX *md_ctx; | ||
| 688 | unsigned char buffer[4096]; | 689 | unsigned char buffer[4096]; |
| 689 | int length; | 690 | int length; |
| 690 | 691 | ||
| @@ -695,16 +696,24 @@ create_digest(BIO *input, char *digest, const EVP_MD *md, | |||
| 695 | if ((md_ctx = EVP_MD_CTX_new()) == NULL) | 696 | if ((md_ctx = EVP_MD_CTX_new()) == NULL) |
| 696 | goto err; | 697 | goto err; |
| 697 | 698 | ||
| 698 | EVP_DigestInit(md_ctx, md); | 699 | if (!EVP_DigestInit(md_ctx, md)) |
| 700 | goto err; | ||
| 701 | |||
| 699 | while ((length = BIO_read(input, buffer, sizeof(buffer))) > 0) { | 702 | while ((length = BIO_read(input, buffer, sizeof(buffer))) > 0) { |
| 700 | EVP_DigestUpdate(md_ctx, buffer, length); | 703 | if (!EVP_DigestUpdate(md_ctx, buffer, length)) |
| 704 | goto err; | ||
| 701 | } | 705 | } |
| 702 | EVP_DigestFinal(md_ctx, *md_value, NULL); | 706 | |
| 707 | if (!EVP_DigestFinal(md_ctx, *md_value, NULL)) | ||
| 708 | goto err; | ||
| 703 | 709 | ||
| 704 | EVP_MD_CTX_free(md_ctx); | 710 | EVP_MD_CTX_free(md_ctx); |
| 711 | md_ctx = NULL; | ||
| 712 | |||
| 705 | } else { | 713 | } else { |
| 706 | /* Digest bytes are specified with digest. */ | 714 | /* Digest bytes are specified with digest. */ |
| 707 | long digest_len; | 715 | long digest_len; |
| 716 | |||
| 708 | *md_value = string_to_hex(digest, &digest_len); | 717 | *md_value = string_to_hex(digest, &digest_len); |
| 709 | if (*md_value == NULL || md_value_len != digest_len) { | 718 | if (*md_value == NULL || md_value_len != digest_len) { |
| 710 | free(*md_value); | 719 | free(*md_value); |
| @@ -716,7 +725,9 @@ create_digest(BIO *input, char *digest, const EVP_MD *md, | |||
| 716 | } | 725 | } |
| 717 | 726 | ||
| 718 | return md_value_len; | 727 | return md_value_len; |
| 728 | |||
| 719 | err: | 729 | err: |
| 730 | EVP_MD_CTX_free(md_ctx); | ||
| 720 | return 0; | 731 | return 0; |
| 721 | } | 732 | } |
| 722 | 733 | ||
