From 6417186365f4a73a719fff754fefe8edcef2bc28 Mon Sep 17 00:00:00 2001 From: Paul Bakker Date: Thu, 6 Jun 2013 15:01:18 +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. --- ChangeLog | 1 + library/x509parse.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index 53a6095f2..59be48bee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,7 @@ Bugfix supports secure renegotiation * Fixed offset for cert_type list in ssl_parse_certificate_request() * Fixed const correctness issues that have no impact on the ABI + * x509parse_crt() now better handles PEM error situations = Version 1.2.7 released 2013-04-13 Features diff --git a/library/x509parse.c b/library/x509parse.c index 2541eeca3..35f272986 100644 --- a/library/x509parse.c +++ b/library/x509parse.c @@ -1463,10 +1463,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;