\r
# define M_ASN1_New(arg,func) \\r
if (((arg)=func()) == NULL) return(NULL)\r
+diff --git a/crypto/bn/bn_prime.c b/crypto/bn/bn_prime.c\r
+index 1d25687..e933ead 100644\r
+--- a/crypto/bn/bn_prime.c\r
++++ b/crypto/bn/bn_prime.c\r
+@@ -131,7 +131,7 @@\r
+ static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1,\r
+ const BIGNUM *a1_odd, int k, BN_CTX *ctx,\r
+ BN_MONT_CTX *mont);\r
+-static int probable_prime(BIGNUM *rnd, int bits);\r
++static int probable_prime(BIGNUM *rnd, int bits, prime_t *mods);\r
+ static int probable_prime_dh(BIGNUM *rnd, int bits,\r
+ const BIGNUM *add, const BIGNUM *rem,\r
+ BN_CTX *ctx);\r
+@@ -166,9 +166,13 @@ int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe,\r
+ BIGNUM *t;\r
+ int found = 0;\r
+ int i, j, c1 = 0;\r
+- BN_CTX *ctx;\r
++ BN_CTX *ctx = NULL;\r
++ prime_t *mods = NULL;\r
+ int checks = BN_prime_checks_for_size(bits);\r
+ \r
++ mods = OPENSSL_malloc(sizeof(*mods) * NUMPRIMES);\r
++ if (mods == NULL)\r
++ goto err;\r
+ ctx = BN_CTX_new();\r
+ if (ctx == NULL)\r
+ goto err;\r
+@@ -179,7 +183,7 @@ int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe,\r
+ loop:\r
+ /* make a random number and set the top and bottom bits */\r
+ if (add == NULL) {\r
+- if (!probable_prime(ret, bits))\r
++ if (!probable_prime(ret, bits, mods))\r
+ goto err;\r
+ } else {\r
+ if (safe) {\r
+@@ -230,6 +234,7 @@ int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe,\r
+ /* we have a prime :-) */\r
+ found = 1;\r
+ err:\r
++ OPENSSL_free(mods);\r
+ if (ctx != NULL) {\r
+ BN_CTX_end(ctx);\r
+ BN_CTX_free(ctx);\r
+@@ -375,10 +380,9 @@ static int witness(BIGNUM *w, const BIGNUM *a, const BIGNUM *a1,\r
+ return 1;\r
+ }\r
+ \r
+-static int probable_prime(BIGNUM *rnd, int bits)\r
++static int probable_prime(BIGNUM *rnd, int bits, prime_t *mods)\r
+ {\r
+ int i;\r
+- prime_t mods[NUMPRIMES];\r
+ BN_ULONG delta, maxdelta;\r
+ \r
+ again:\r
diff --git a/crypto/conf/conf.h b/crypto/conf/conf.h\r
index 8d926d5..41cf38e 100644\r
--- a/crypto/conf/conf.h\r
* These functions write a private key in PKCS#8 format: it is a "drop in"\r
* replacement for PEM_write_bio_PrivateKey() and friends. As usual if 'enc'\r
diff --git a/crypto/pkcs7/pk7_smime.c b/crypto/pkcs7/pk7_smime.c\r
-index c4d3724..fd531c9 100644\r
+index c4d3724..0bc3d43 100644\r
--- a/crypto/pkcs7/pk7_smime.c\r
+++ b/crypto/pkcs7/pk7_smime.c\r
-@@ -254,7 +254,8 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
+@@ -64,6 +64,9 @@\r
+ #include <openssl/x509.h>\r
+ #include <openssl/x509v3.h>\r
+ \r
++\r
++#define BUFFERSIZE 4096\r
++\r
+ static int pkcs7_copy_existing_digest(PKCS7 *p7, PKCS7_SIGNER_INFO *si);\r
+ \r
+ PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs,\r
+@@ -254,7 +257,7 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
STACK_OF(PKCS7_SIGNER_INFO) *sinfos;\r
PKCS7_SIGNER_INFO *si;\r
X509_STORE_CTX cert_ctx;\r
- char buf[4096];\r
+ char *buf = NULL;\r
-+ int bufsiz;\r
int i, j = 0, k, ret = 0;\r
BIO *p7bio = NULL;\r
BIO *tmpin = NULL, *tmpout = NULL;\r
-@@ -274,12 +275,29 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
+@@ -274,12 +277,29 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
PKCS7err(PKCS7_F_PKCS7_VERIFY, PKCS7_R_NO_CONTENT);\r
return 0;\r
}\r
\r
sinfos = PKCS7_get_signer_info(p7);\r
\r
-@@ -355,9 +373,14 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
- } else\r
+@@ -356,8 +376,12 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
tmpout = out;\r
\r
-+ bufsiz = 4096;\r
-+ buf = OPENSSL_malloc(bufsiz);\r
-+ if (buf == NULL) {\r
+ /* We now have to 'read' from p7bio to calculate digests etc. */\r
++ if ((buf = OPENSSL_malloc(BUFFERSIZE)) == NULL) {\r
++ PKCS7err(PKCS7_F_PKCS7_VERIFY, ERR_R_MALLOC_FAILURE);\r
+ goto err;\r
+ }\r
- /* We now have to 'read' from p7bio to calculate digests etc. */\r
for (;;) {\r
- i = BIO_read(p7bio, buf, sizeof(buf));\r
-+ i = BIO_read(p7bio, buf, bufsiz);\r
++ i = BIO_read(p7bio, buf, BUFFERSIZE);\r
if (i <= 0)\r
break;\r
if (tmpout)\r
-@@ -394,6 +417,9 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
- }\r
- BIO_free_all(p7bio);\r
- sk_X509_free(signers);\r
-+ if (buf != NULL) {\r
-+ OPENSSL_free(buf);\r
+@@ -388,6 +412,7 @@ int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,\r
+ ret = 1;\r
+ \r
+ err:\r
++ OPENSSL_free(buf);\r
+ if (tmpin == indata) {\r
+ if (indata)\r
+ BIO_pop(p7bio);\r
+@@ -506,7 +531,7 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags)\r
+ {\r
+ BIO *tmpmem;\r
+ int ret, i;\r
+- char buf[4096];\r
++ char *buf = NULL;\r
+ \r
+ if (!p7) {\r
+ PKCS7err(PKCS7_F_PKCS7_DECRYPT, PKCS7_R_INVALID_NULL_POINTER);\r
+@@ -550,24 +575,29 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags)\r
+ }\r
+ BIO_free_all(bread);\r
+ return ret;\r
+- } else {\r
+- for (;;) {\r
+- i = BIO_read(tmpmem, buf, sizeof(buf));\r
+- if (i <= 0) {\r
+- ret = 1;\r
+- if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER) {\r
+- if (!BIO_get_cipher_status(tmpmem))\r
+- ret = 0;\r
+- }\r
+-\r
+- break;\r
+- }\r
+- if (BIO_write(data, buf, i) != i) {\r
+- ret = 0;\r
+- break;\r
+ }\r
- return ret;\r
++ if ((buf = OPENSSL_malloc(BUFFERSIZE)) == NULL) {\r
++ PKCS7err(PKCS7_F_PKCS7_DECRYPT, ERR_R_MALLOC_FAILURE);\r
++ goto err;\r
++ }\r
++ for (;;) {\r
++ i = BIO_read(tmpmem, buf, BUFFERSIZE);\r
++ if (i <= 0) {\r
++ ret = 1;\r
++ if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER) {\r
++ if (!BIO_get_cipher_status(tmpmem))\r
++ ret = 0;\r
+ }\r
++\r
++ break;\r
++ }\r
++ if (BIO_write(data, buf, i) != i) {\r
++ ret = 0;\r
++ break;\r
+ }\r
+- BIO_free_all(tmpmem);\r
+- return ret;\r
+ }\r
++err:\r
++ OPENSSL_free(buf);\r
++ BIO_free_all(tmpmem);\r
++ return ret;\r
}\r
- \r
diff --git a/crypto/rand/rand_unix.c b/crypto/rand/rand_unix.c\r
index 266111e..f60fac6 100644\r
--- a/crypto/rand/rand_unix.c\r