Fix potential memory leaks
diff --git a/library/ecjpake.c b/library/ecjpake.c
index 57afb45..19f964f 100644
--- a/library/ecjpake.c
+++ b/library/ecjpake.c
@@ -160,7 +160,10 @@
len = mbedtls_mpi_size( &h ); /* actually r */
if( end < *p || (size_t)( end - *p ) < 1 + len || len > 255 )
- return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL );
+ {
+ ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL;
+ goto cleanup;
+ }
*(*p)++ = (unsigned char)( len & 0xFF );
MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &h, *p, len ) ); /* r */
@@ -208,11 +211,17 @@
(const unsigned char **) p, end - *p ) );
if( end < *p || (size_t)( end - *p ) < 1 )
- return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+ {
+ ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA;
+ goto cleanup;
+ }
r_len = *(*p)++;
if( end < *p || (size_t)( end - *p ) < r_len )
- return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA );
+ {
+ ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA;
+ goto cleanup;
+ }
MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &r, *p, r_len ) );
*p += r_len;
@@ -225,7 +234,10 @@
&VV, &h, X, &r, G ) );
if( mbedtls_ecp_point_cmp( &VV, &V ) != 0 )
- return( MBEDTLS_ERR_ECP_VERIFY_FAILED );
+ {
+ ret = MBEDTLS_ERR_ECP_VERIFY_FAILED;
+ goto cleanup;
+ }
cleanup:
mbedtls_ecp_point_free( &V );