Fix bug in ssl_get_verify_result()
diff --git a/ChangeLog b/ChangeLog
index d9716df..b43a5d8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -50,6 +50,8 @@
* Fix unchecked return code in x509_crt_parse_path() on Windows (found by
Peter Vaskovic).
* Fix assembly selection for MIPS64 (thanks to James Cowgill).
+ * ssl_get_verify_result() now works even if the handshake was aborted due
+ to a failed verification (found by Fredrik Axelsson).
Changes
* Use deterministic nonces for AEAD ciphers in TLS by default (possible to
diff --git a/include/polarssl/ssl.h b/include/polarssl/ssl.h
index efeece5..189af05 100644
--- a/include/polarssl/ssl.h
+++ b/include/polarssl/ssl.h
@@ -1710,11 +1710,11 @@
*
* \param ssl SSL context
*
- * \return 0 if successful, or a combination of:
- * BADCERT_EXPIRED
- * BADCERT_REVOKED
- * BADCERT_CN_MISMATCH
- * BADCERT_NOT_TRUSTED
+ * \return 0 if successful,
+ * -1 if result is not available (eg because the handshake was
+ * aborted too early), or
+ * a combination of BADCERT_xxx and BADCRL_xxx flags, see
+ * x509.h
*/
int ssl_get_verify_result( const ssl_context *ssl );
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index fceb9b8..7383e1c 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -4336,7 +4336,13 @@
int ssl_get_verify_result( const ssl_context *ssl )
{
- return( ssl->session->verify_result );
+ if( ssl->session != NULL )
+ return( ssl->session->verify_result );
+
+ if( ssl->session_negotiate != NULL )
+ return( ssl->session_negotiate->verify_result );
+
+ return( -1 );
}
const char *ssl_get_ciphersuite( const ssl_context *ssl )