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 );