Fix possible memory leak in <MD>_ext()
diff --git a/library/md2.c b/library/md2.c
index a5d768b..8d887a1 100644
--- a/library/md2.c
+++ b/library/md2.c
@@ -229,18 +229,18 @@
mbedtls_md2_init( &ctx );
if( ( ret = mbedtls_md2_starts_ext( &ctx ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_md2_update_ext( &ctx, input, ilen ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_md2_finish_ext( &ctx, output ) ) != 0 )
- return( ret );
+ goto exit;
-
+exit:
mbedtls_md2_free( &ctx );
- return( 0 );
+ return( ret );
}
#if defined(MBEDTLS_SELF_TEST)
diff --git a/library/md4.c b/library/md4.c
index da4df7b..1121fd1 100644
--- a/library/md4.c
+++ b/library/md4.c
@@ -333,17 +333,18 @@
mbedtls_md4_init( &ctx );
if( ( ret = mbedtls_md4_starts_ext( &ctx ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_md4_update_ext( &ctx, input, ilen ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_md4_finish_ext( &ctx, output ) ) != 0 )
- return( ret );
+ goto exit;
+exit:
mbedtls_md4_free( &ctx );
- return( 0 );
+ return( ret );
}
#if defined(MBEDTLS_SELF_TEST)
diff --git a/library/md5.c b/library/md5.c
index 8150f94..93f6434 100644
--- a/library/md5.c
+++ b/library/md5.c
@@ -347,17 +347,18 @@
mbedtls_md5_init( &ctx );
if( ( ret = mbedtls_md5_starts_ext( &ctx ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_md5_update_ext( &ctx, input, ilen ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_md5_finish_ext( &ctx, output ) ) != 0 )
- return( ret );
+ goto exit;
+exit:
mbedtls_md5_free( &ctx );
- return( 0 );
+ return( ret );
}
#if defined(MBEDTLS_SELF_TEST)
diff --git a/library/ripemd160.c b/library/ripemd160.c
index 4e92bb7..0fc12a1 100644
--- a/library/ripemd160.c
+++ b/library/ripemd160.c
@@ -406,17 +406,18 @@
mbedtls_ripemd160_init( &ctx );
if( ( ret = mbedtls_ripemd160_starts_ext( &ctx ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_ripemd160_update_ext( &ctx, input, ilen ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_ripemd160_finish_ext( &ctx, output ) ) != 0 )
- return( ret );
+ goto exit;
+exit:
mbedtls_ripemd160_free( &ctx );
- return( 0 );
+ return( ret );
}
#if defined(MBEDTLS_SELF_TEST)
diff --git a/library/sha1.c b/library/sha1.c
index 64b70f0..42f3d6c 100644
--- a/library/sha1.c
+++ b/library/sha1.c
@@ -380,17 +380,18 @@
mbedtls_sha1_init( &ctx );
if( ( ret = mbedtls_sha1_starts_ext( &ctx ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_sha1_update_ext( &ctx, input, ilen ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_sha1_finish_ext( &ctx, output ) ) != 0 )
- return( ret );
+ goto exit;
+exit:
mbedtls_sha1_free( &ctx );
- return( 0 );
+ return( ret );
}
#if defined(MBEDTLS_SELF_TEST)
diff --git a/library/sha256.c b/library/sha256.c
index 16a2f0b..fb03cd1 100644
--- a/library/sha256.c
+++ b/library/sha256.c
@@ -355,17 +355,18 @@
mbedtls_sha256_init( &ctx );
if( ( ret = mbedtls_sha256_starts_ext( &ctx, is224 ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_sha256_update_ext( &ctx, input, ilen ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_sha256_finish_ext( &ctx, output ) ) != 0 )
- return( ret );
+ goto exit;
+exit:
mbedtls_sha256_free( &ctx );
- return( 0 );
+ return( ret );
}
#if defined(MBEDTLS_SELF_TEST)
diff --git a/library/sha512.c b/library/sha512.c
index 76d21dd..b1947f1 100644
--- a/library/sha512.c
+++ b/library/sha512.c
@@ -391,17 +391,18 @@
mbedtls_sha512_init( &ctx );
if( ( ret = mbedtls_sha512_starts_ext( &ctx, is384 ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_sha512_update_ext( &ctx, input, ilen ) ) != 0 )
- return( ret );
+ goto exit;
if( ( ret = mbedtls_sha512_finish_ext( &ctx, output ) ) != 0 )
- return( ret );
+ goto exit;
+exit:
mbedtls_sha512_free( &ctx );
- return( 0 );
+ return( ret );
}
#if defined(MBEDTLS_SELF_TEST)