From: Dr. Stephen Henson Date: Wed, 29 Feb 2012 14:01:53 +0000 (+0000) Subject: PR: 2742 X-Git-Tag: OpenSSL_1_0_1~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8595879ec1bf89cd2da46492eba0f435204c04a;p=openssl PR: 2742 Reported by: Dmitry Belyavsky If resigning with detached content in CMS just copy data across. --- diff --git a/crypto/asn1/asn_mime.c b/crypto/asn1/asn_mime.c index 42536f77e3..6d8a9bf90f 100644 --- a/crypto/asn1/asn_mime.c +++ b/crypto/asn1/asn_mime.c @@ -377,8 +377,12 @@ static int asn1_output_data(BIO *out, BIO *data, ASN1_VALUE *val, int flags, BIO *tmpbio; const ASN1_AUX *aux = it->funcs; ASN1_STREAM_ARG sarg; + int rv = 1; - if (!(flags & SMIME_DETACHED)) + /* If data is not deteched or resigning then the output BIO is + * already set up to finalise when it is written through. + */ + if (!(flags & SMIME_DETACHED) || (flags & PKCS7_REUSE_DIGEST)) { SMIME_crlf_copy(data, out, flags); return 1; @@ -405,7 +409,7 @@ static int asn1_output_data(BIO *out, BIO *data, ASN1_VALUE *val, int flags, /* Finalize structure */ if (aux->asn1_cb(ASN1_OP_DETACHED_POST, &val, it, &sarg) <= 0) - return 0; + rv = 0; /* Now remove any digests prepended to the BIO */ @@ -416,7 +420,7 @@ static int asn1_output_data(BIO *out, BIO *data, ASN1_VALUE *val, int flags, sarg.ndef_bio = tmpbio; } - return 1; + return rv; }