Set peer CRT length only after successful allocation
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index 9eaee9d..82ba623 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -309,15 +309,15 @@
 #else /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */
     if( src->peer_cert_digest != NULL )
     {
-        dst->peer_cert_digest_len = src->peer_cert_digest_len;
         dst->peer_cert_digest =
-            mbedtls_calloc( 1, dst->peer_cert_digest_len );
+            mbedtls_calloc( 1, src->peer_cert_digest_len );
         if( dst->peer_cert_digest == NULL )
             return( MBEDTLS_ERR_SSL_ALLOC_FAILED );
 
         memcpy( dst->peer_cert_digest, src->peer_cert_digest,
                 src->peer_cert_digest_len );
         dst->peer_cert_digest_type = src->peer_cert_digest_type;
+        dst->peer_cert_digest_len = src->peer_cert_digest_len;
     }
 #endif /* MBEDTLS_SSL_KEEP_PEER_CERTIFICATE */