summaryrefslogtreecommitdiff
path: root/src/usr.bin
diff options
context:
space:
mode:
authorinoguchi <>2022-03-27 00:37:10 +0000
committerinoguchi <>2022-03-27 00:37:10 +0000
commitcf5ecaedae5855d39116cfdc6e431f8aebc4c13f (patch)
tree120e72b67e66895610a3e24f5f093980d118caf5 /src/usr.bin
parent62e5583bb1b862560432775b3c0765db00173fc6 (diff)
downloadopenbsd-cf5ecaedae5855d39116cfdc6e431f8aebc4c13f.tar.gz
openbsd-cf5ecaedae5855d39116cfdc6e431f8aebc4c13f.tar.bz2
openbsd-cf5ecaedae5855d39116cfdc6e431f8aebc4c13f.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/usr.bin')
-rw-r--r--src/usr.bin/openssl/ts.c21
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