Detect symmetric crypto errors in PKCS7_decrypt.
authorDr. Stephen Henson <steve@openssl.org>
Mon, 27 Feb 2012 15:23:20 +0000 (15:23 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 27 Feb 2012 15:23:20 +0000 (15:23 +0000)
Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for reporting this bug.

crypto/pkcs7/pk7_smime.c

index fd18ec3d95cfc45d5d0cff9f82363e8e9e8645a2..fd56b42066fecfbee9c0391716a614883e7b7d43 100644 (file)
@@ -486,15 +486,30 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags)
                        return 0;
                }
                ret = SMIME_text(bread, data);
+               if (ret > 0 && BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
+                       {
+                       if (!BIO_get_cipher_status(tmpmem))
+                               ret = 0;
+                       }
                BIO_free_all(bread);
                return ret;
        } else {
                for(;;) {
                        i = BIO_read(tmpmem, buf, sizeof(buf));
-                       if(i <= 0) break;
+                       if(i <= 0)
+                               {
+                               ret = 1;
+                               if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER)
+                                       {
+                                       if (!BIO_get_cipher_status(tmpmem))
+                                               ret = 0;
+                                       }
+                                       
+                               break;
+                               }
                        BIO_write(data, buf, i);
                }
                BIO_free_all(tmpmem);
-               return 1;
+               return ret;
        }
 }