From 9f535a906cda22e0b3a11aa7ff27e7b4801cf4e8 Mon Sep 17 00:00:00 2001
From: Jonas Maebe <jonas.maebe@elis.ugent.be>
Date: Mon, 9 Dec 2013 22:02:06 +0100
Subject: [PATCH 5/7] multi_split: check for NULL when allocating parts and
 bpart, and for failure of sk_BIO_push()

---
 crypto/asn1/asn_mime.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/crypto/asn1/asn_mime.c b/crypto/asn1/asn_mime.c
index 2d0d334..cab2db5 100644
--- a/crypto/asn1/asn_mime.c
+++ b/crypto/asn1/asn_mime.c
@@ -620,21 +620,34 @@ static int multi_split(BIO *bio, char *bound, STACK_OF(BIO) **ret)
 	first = 1;
 	parts = sk_BIO_new_null();
 	*ret = parts;
+	if (*ret == NULL)
+		return 0;
 	while ((len = BIO_gets(bio, linebuf, MAX_SMLEN)) > 0) {
 		state = mime_bound_check(linebuf, len, bound, blen);
 		if(state == 1) {
 			first = 1;
 			part++;
 		} else if(state == 2) {
-			sk_BIO_push(parts, bpart);
+			if (!sk_BIO_push(parts, bpart))
+				{
+				BIO_free(bpart);
+				return 0;
+				}
 			return 1;
 		} else if(part) {
 			/* Strip CR+LF from linebuf */
 			next_eol = strip_eol(linebuf, &len);
 			if(first) {
 				first = 0;
-				if(bpart) sk_BIO_push(parts, bpart);
+				if(bpart)
+					if (!sk_BIO_push(parts, bpart))
+						{
+						BIO_free(bpart);
+						return 0;
+						}
 				bpart = BIO_new(BIO_s_mem());
+				if (bpart == NULL)
+					return 0;
 				BIO_set_mem_eof_return(bpart, 0);
 			} else if (eol)
 				BIO_write(bpart, "\r\n", 2);
-- 
1.8.3.1

