diff options
Diffstat (limited to 'src/lib/libcrypto/cms/cms_smime.c')
-rw-r--r-- | src/lib/libcrypto/cms/cms_smime.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lib/libcrypto/cms/cms_smime.c b/src/lib/libcrypto/cms/cms_smime.c index f79c504e91..b9463f9abb 100644 --- a/src/lib/libcrypto/cms/cms_smime.c +++ b/src/lib/libcrypto/cms/cms_smime.c | |||
@@ -68,7 +68,10 @@ static int cms_copy_content(BIO *out, BIO *in, unsigned int flags) | |||
68 | if (out == NULL) | 68 | if (out == NULL) |
69 | tmpout = BIO_new(BIO_s_null()); | 69 | tmpout = BIO_new(BIO_s_null()); |
70 | else if (flags & CMS_TEXT) | 70 | else if (flags & CMS_TEXT) |
71 | { | ||
71 | tmpout = BIO_new(BIO_s_mem()); | 72 | tmpout = BIO_new(BIO_s_mem()); |
73 | BIO_set_mem_eof_return(tmpout, 0); | ||
74 | } | ||
72 | else | 75 | else |
73 | tmpout = out; | 76 | tmpout = out; |
74 | 77 | ||
@@ -89,11 +92,13 @@ static int cms_copy_content(BIO *out, BIO *in, unsigned int flags) | |||
89 | if (!BIO_get_cipher_status(in)) | 92 | if (!BIO_get_cipher_status(in)) |
90 | goto err; | 93 | goto err; |
91 | } | 94 | } |
95 | if (i < 0) | ||
96 | goto err; | ||
92 | break; | 97 | break; |
93 | } | 98 | } |
94 | 99 | ||
95 | if (tmpout) | 100 | if (tmpout && (BIO_write(tmpout, buf, i) != i)) |
96 | BIO_write(tmpout, buf, i); | 101 | goto err; |
97 | } | 102 | } |
98 | 103 | ||
99 | if(flags & CMS_TEXT) | 104 | if(flags & CMS_TEXT) |