From 721f06d49d5935c587597857052c14b9db96163f Mon Sep 17 00:00:00 2001
From: Paul Bakker
Date: Wed, 19 Jun 2013 12:07:42 +0200
Subject: [PATCH] x509parse_crt() now better handles PEM error situations
Because of new pem_read_buffer() handling of when it writes use_len,
x509parse_crt() is able to better handle situations where a PEM blob
results in an error but the other blobs can still be parsed.
(cherry picked from commit 6417186365f4a73a719fff754fefe8edcef2bc28)
Conflicts:
ChangeLog
---
ChangeLog | 3 +++
library/x509parse.c | 10 ++++++++++
2 files changed, 13 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index 56187899a..4e9fb7c93 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,9 @@ PolarSSL ChangeLog
Changes
* HAVEGE random generator disabled by default
+Bugfix
+ * x509parse_crt() now better handles PEM error situations
+
= Version 1.1.6 released on 2013-03-11
Bugfix
* Fixed net_bind() for specified IP addresses on little endian systems
diff --git a/library/x509parse.c b/library/x509parse.c
index 7fd167291..42ddd70e2 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -1349,10 +1349,20 @@ int x509parse_crt( x509_cert *chain, const unsigned char *buf, size_t buflen )
buflen -= use_len;
buf += use_len;
}
+ else if( ret == POLARSSL_ERR_PEM_BAD_INPUT_DATA )
+ {
+ return( ret );
+ }
else if( ret != POLARSSL_ERR_PEM_NO_HEADER_FOOTER_PRESENT )
{
pem_free( &pem );
+ /*
+ * PEM header and footer were found
+ */
+ buflen -= use_len;
+ buf += use_len;
+
if( first_error == 0 )
first_error = ret;