Merge branch 'memcheck-fix' into development
diff --git a/ChangeLog b/ChangeLog
index 3b32873..0699660 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -26,6 +26,7 @@
* Fix issue that caused a crash if invalid curves were passed to
mbedtls_ssl_conf_curves. #373
* Fix issue in ssl_fork_server which was preventing it from functioning. #429
+ * Fix memory leaks in test framework
Changes
* On ARM platforms, when compiling with -O0 with GCC, Clang or armcc5,
diff --git a/tests/suites/main_test.function b/tests/suites/main_test.function
index c5d6cd8..f182485 100644
--- a/tests/suites/main_test.function
+++ b/tests/suites/main_test.function
@@ -321,6 +321,9 @@
testfile_index < testfile_count;
testfile_index++ )
{
+ int unmet_dep_count = 0;
+ char *unmet_dependencies[20];
+
test_filename = test_files[ testfile_index ];
file = fopen( test_filename, "r" );
@@ -333,8 +336,12 @@
while( !feof( file ) )
{
- int unmet_dep_count = 0;
- char *unmet_dependencies[20];
+ if( unmet_dep_count > 0 )
+ {
+ mbedtls_printf("FATAL: Dep count larger than zero at start of loop\n");
+ mbedtls_exit( MBEDTLS_EXIT_FAILURE );
+ }
+ unmet_dep_count = 0;
if( ( ret = get_line( file, buf, sizeof(buf) ) ) != 0 )
break;
@@ -357,8 +364,15 @@
{
if( dep_check( params[i] ) != DEPENDENCY_SUPPORTED )
{
- unmet_dependencies[ i-1 ] = strdup(params[i]);
- if( unmet_dependencies[ i-1 ] == NULL )
+ if( 0 == option_verbose )
+ {
+ /* Only one count is needed if not verbose */
+ unmet_dep_count++;
+ break;
+ }
+
+ unmet_dependencies[ unmet_dep_count ] = strdup(params[i]);
+ if( unmet_dependencies[ unmet_dep_count ] == NULL )
{
mbedtls_printf("FATAL: Out of memory\n");
mbedtls_exit( MBEDTLS_EXIT_FAILURE );
@@ -392,16 +406,17 @@
if( 1 == option_verbose && unmet_dep_count > 0 )
{
mbedtls_fprintf( stdout, " Unmet dependencies: " );
- while( unmet_dep_count > 0)
+ for( i = 0; i < unmet_dep_count; i++ )
{
mbedtls_fprintf(stdout, "%s ",
- unmet_dependencies[unmet_dep_count - 1]);
- free(unmet_dependencies[unmet_dep_count - 1]);
- unmet_dep_count--;
+ unmet_dependencies[i]);
+ free(unmet_dependencies[i]);
}
mbedtls_fprintf( stdout, "\n" );
}
fflush( stdout );
+
+ unmet_dep_count = 0;
}
else if( ret == DISPATCH_TEST_SUCCESS && test_errors == 0 )
{
@@ -427,6 +442,10 @@
}
}
fclose(file);
+
+ /* In case we encounter early end of file */
+ for( i = 0; i < unmet_dep_count; i++ )
+ free( unmet_dependencies[i] );
}
mbedtls_fprintf( stdout, "\n----------------------------------------------------------------------------\n\n");