From b15b851d6d741b409d038f38df6b23875aa56bb3 Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Fri, 13 Jan 2012 13:44:06 +0000
Subject: [PATCH] - Check for failed malloc() in ssl_set_hostname() and
x509_get_entries() (Closes ticket #47, found by Hugo Leisink)
---
ChangeLog | 5 +++++
include/polarssl/ssl.h | 2 +-
library/ssl_tls.c | 3 +++
library/x509parse.c | 4 ++++
4 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 49e48491e..51e9f9fca 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
PolarSSL ChangeLog
+= Version Trunk
+Bugfix
+ * Check for failed malloc() in ssl_set_hostname() and x509_get_entries()
+ (Closes ticket #47, found by Hugo Leisink)
+
= Version 1.1.0 released on 2011-12-22
Features
* Added ssl_session_reset() to allow better multi-connection pools of
diff --git a/include/polarssl/ssl.h b/include/polarssl/ssl.h
index c897a1e3e..74c5d2df7 100644
--- a/include/polarssl/ssl.h
+++ b/include/polarssl/ssl.h
@@ -562,7 +562,7 @@ int ssl_set_dh_param_ctx( ssl_context *ssl, dhm_context *dhm_ctx );
* \param ssl SSL context
* \param hostname the server hostname
*
- * \return 0 if successful
+ * \return 0 if successful or POLARSSL_ERR_SSL_MALLOC_FAILED
*/
int ssl_set_hostname( ssl_context *ssl, const char *hostname );
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 545317ab8..44e972cf9 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -1913,6 +1913,9 @@ int ssl_set_hostname( ssl_context *ssl, const char *hostname )
ssl->hostname_len = strlen( hostname );
ssl->hostname = (unsigned char *) malloc( ssl->hostname_len + 1 );
+ if( ssl->hostname == NULL )
+ return( POLARSSL_ERR_SSL_MALLOC_FAILED );
+
memcpy( ssl->hostname, (unsigned char *) hostname,
ssl->hostname_len );
diff --git a/library/x509parse.c b/library/x509parse.c
index f561754eb..ec4fffc93 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -968,6 +968,10 @@ static int x509_get_entries( unsigned char **p,
if ( *p < end )
{
cur_entry->next = malloc( sizeof( x509_crl_entry ) );
+
+ if( cur_entry->next == NULL )
+ return( POLARSSL_ERR_X509_MALLOC_FAILED );
+
cur_entry = cur_entry->next;
memset( cur_entry, 0, sizeof( x509_crl_entry ) );
}