diff --git a/library/ripemd160.c b/library/ripemd160.c
index 8bf988e..4e92bb7 100644
--- a/library/ripemd160.c
+++ b/library/ripemd160.c
@@ -464,7 +464,7 @@
  */
 int mbedtls_ripemd160_self_test( int verbose )
 {
-    int i, ret;
+    int i, ret = 0;
     unsigned char output[20];
 
     memset( output, 0, sizeof output );
@@ -481,7 +481,10 @@
             goto fail;
 
         if( memcmp( output, ripemd160_test_md[i], 20 ) != 0 )
+        {
+            ret = 1;
             goto fail;
+        }
 
         if( verbose != 0 )
             mbedtls_printf( "passed\n" );
@@ -496,7 +499,7 @@
     if( verbose != 0 )
         mbedtls_printf( "failed\n" );
 
-    return( 1 );
+    return( ret );
 }
 
 #endif /* MBEDTLS_SELF_TEST */
diff --git a/library/sha1.c b/library/sha1.c
index fdd0878..64b70f0 100644
--- a/library/sha1.c
+++ b/library/sha1.c
@@ -439,7 +439,7 @@
         if( verbose != 0 )
             mbedtls_printf( "  SHA-1 test #%d: ", i + 1 );
 
-        if( mbedtls_sha1_starts_ext( &ctx ) != 0 )
+        if( ( ret = mbedtls_sha1_starts_ext( &ctx ) ) != 0 )
             goto fail;
 
         if( i == 2 )
@@ -448,21 +448,27 @@
 
             for( j = 0; j < 1000; j++ )
             {
-                if( mbedtls_sha1_update_ext( &ctx, buf, buflen ) != 0 )
+                ret = mbedtls_sha1_update_ext( &ctx, buf, buflen );
+                if( ret != 0 )
                     goto fail;
             }
         }
         else
         {
-            if( mbedtls_sha1_update_ext( &ctx, sha1_test_buf[i],
-                                         sha1_test_buflen[i] ) != 0 )
+            ret = mbedtls_sha1_update_ext( &ctx, sha1_test_buf[i],
+                                           sha1_test_buflen[i] );
+            if( ret != 0 )
                 goto fail;
         }
 
-        mbedtls_sha1_finish_ext( &ctx, sha1sum );
+        if( ( ret = mbedtls_sha1_finish_ext( &ctx, sha1sum ) ) != 0 )
+            goto fail;
 
         if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 )
-            goto exit;
+        {
+            ret = 1;
+            goto fail;
+        }
 
         if( verbose != 0 )
             mbedtls_printf( "passed\n" );
@@ -477,8 +483,6 @@
     if( verbose != 0 )
         mbedtls_printf( "failed\n" );
 
-    ret = 1;
-
 exit:
     mbedtls_sha1_free( &ctx );
 
diff --git a/library/sha256.c b/library/sha256.c
index 88435a3..16a2f0b 100644
--- a/library/sha256.c
+++ b/library/sha256.c
@@ -448,7 +448,7 @@
         if( verbose != 0 )
             mbedtls_printf( "  SHA-%d test #%d: ", 256 - k * 32, j + 1 );
 
-        if( mbedtls_sha256_starts_ext( &ctx, k ) != 0 )
+        if( ( ret = mbedtls_sha256_starts_ext( &ctx, k ) ) != 0 )
             goto fail;
 
         if( j == 2 )
@@ -456,23 +456,30 @@
             memset( buf, 'a', buflen = 1000 );
 
             for( j = 0; j < 1000; j++ )
-                if( mbedtls_sha256_update_ext( &ctx, buf, buflen ) != 0 )
+            {
+                ret = mbedtls_sha256_update_ext( &ctx, buf, buflen );
+                if( ret != 0 )
                     goto fail;
+            }
 
         }
         else
         {
-           if(  mbedtls_sha256_update_ext( &ctx, sha256_test_buf[j],
-                                           sha256_test_buflen[j] ) != 0 )
-                goto fail;
+            ret = mbedtls_sha256_update_ext( &ctx, sha256_test_buf[j],
+                                             sha256_test_buflen[j] );
+            if( ret != 0 )
+                 goto fail;
         }
 
-        if( mbedtls_sha256_finish_ext( &ctx, sha256sum ) != 0 )
+        if( ( ret = mbedtls_sha256_finish_ext( &ctx, sha256sum ) ) != 0 )
             goto fail;
 
 
         if( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 )
+        {
+            ret = 1;
             goto fail;
+        }
 
         if( verbose != 0 )
             mbedtls_printf( "passed\n" );
@@ -487,8 +494,6 @@
     if( verbose != 0 )
         mbedtls_printf( "failed\n" );
 
-    ret = 1;
-
 exit:
     mbedtls_sha256_free( &ctx );
     mbedtls_free( buf );
diff --git a/library/sha512.c b/library/sha512.c
index ff7e5ca..76d21dd 100644
--- a/library/sha512.c
+++ b/library/sha512.c
@@ -504,7 +504,7 @@
         if( verbose != 0 )
             mbedtls_printf( "  SHA-%d test #%d: ", 512 - k * 128, j + 1 );
 
-        if( mbedtls_sha512_starts_ext( &ctx, k ) != 0 )
+        if( ( ret = mbedtls_sha512_starts_ext( &ctx, k ) ) != 0 )
             goto fail;
 
         if( j == 2 )
@@ -512,21 +512,28 @@
             memset( buf, 'a', buflen = 1000 );
 
             for( j = 0; j < 1000; j++ )
-                if( mbedtls_sha512_update_ext( &ctx, buf, buflen ) != 0 )
+            {
+                ret = mbedtls_sha512_update_ext( &ctx, buf, buflen );
+                if( ret != 0 )
                     goto fail;
+            }
         }
         else
         {
-            if( mbedtls_sha512_update_ext( &ctx, sha512_test_buf[j],
-                                           sha512_test_buflen[j] ) != 0 )
+            ret = mbedtls_sha512_update_ext( &ctx, sha512_test_buf[j],
+                                             sha512_test_buflen[j] );
+            if( ret != 0 )
                 goto fail;
         }
 
-        if( mbedtls_sha512_finish_ext( &ctx, sha512sum ) != 0 )
+        if( ( ret = mbedtls_sha512_finish_ext( &ctx, sha512sum ) ) != 0 )
             goto fail;
 
         if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 )
+        {
+            ret = 1;
             goto fail;
+        }
 
         if( verbose != 0 )
             mbedtls_printf( "passed\n" );
@@ -541,8 +548,6 @@
     if( verbose != 0 )
         mbedtls_printf( "failed\n" );
 
-    ret = 1;
-
 exit:
     mbedtls_sha512_free( &ctx );
     mbedtls_free( buf );
