Merge pull request #3140 from gilles-peskine-arm/outcome-dependency-crash-fix

Fix intermittent crash in test suites with outcome file enabled
This commit is contained in:
Gilles Peskine 2020-03-31 10:19:13 +02:00 committed by GitHub
commit d4a720f541
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -425,7 +425,7 @@ static void write_outcome_entry( FILE *outcome_file,
*/ */
static void write_outcome_result( FILE *outcome_file, static void write_outcome_result( FILE *outcome_file,
size_t unmet_dep_count, size_t unmet_dep_count,
char *unmet_dependencies[], int unmet_dependencies[],
int ret, int ret,
const test_info_t *info ) const test_info_t *info )
{ {
@ -443,7 +443,7 @@ static void write_outcome_result( FILE *outcome_file,
mbedtls_fprintf( outcome_file, "SKIP" ); mbedtls_fprintf( outcome_file, "SKIP" );
for( i = 0; i < unmet_dep_count; i++ ) for( i = 0; i < unmet_dep_count; i++ )
{ {
mbedtls_fprintf( outcome_file, "%c%s", mbedtls_fprintf( outcome_file, "%c%d",
i == 0 ? ';' : ':', i == 0 ? ';' : ':',
unmet_dependencies[i] ); unmet_dependencies[i] );
} }
@ -598,7 +598,7 @@ int execute_tests( int argc , const char ** argv )
testfile_index++ ) testfile_index++ )
{ {
size_t unmet_dep_count = 0; size_t unmet_dep_count = 0;
char *unmet_dependencies[20]; int unmet_dependencies[20];
test_filename = test_files[ testfile_index ]; test_filename = test_files[ testfile_index ];
@ -647,19 +647,7 @@ int execute_tests( int argc , const char ** argv )
int dep_id = strtol( params[i], NULL, 10 ); int dep_id = strtol( params[i], NULL, 10 );
if( dep_check( dep_id ) != DEPENDENCY_SUPPORTED ) if( dep_check( dep_id ) != DEPENDENCY_SUPPORTED )
{ {
if( 0 == option_verbose ) unmet_dependencies[unmet_dep_count] = dep_id;
{
/* 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_fprintf( stderr, "FATAL: Out of memory\n" );
mbedtls_exit( MBEDTLS_EXIT_FAILURE );
}
unmet_dep_count++; unmet_dep_count++;
} }
} }
@ -730,9 +718,8 @@ int execute_tests( int argc , const char ** argv )
mbedtls_fprintf( stdout, "\n Unmet dependencies: " ); mbedtls_fprintf( stdout, "\n Unmet dependencies: " );
for( i = 0; i < unmet_dep_count; i++ ) for( i = 0; i < unmet_dep_count; i++ )
{ {
mbedtls_fprintf( stdout, "%s ", mbedtls_fprintf( stdout, "%d ",
unmet_dependencies[i] ); unmet_dependencies[i] );
free( unmet_dependencies[i] );
} }
} }
mbedtls_fprintf( stdout, "\n" ); mbedtls_fprintf( stdout, "\n" );
@ -783,10 +770,6 @@ int execute_tests( int argc , const char ** argv )
total_errors++; total_errors++;
} }
fclose( file ); fclose( file );
/* In case we encounter early end of file */
for( i = 0; i < unmet_dep_count; i++ )
free( unmet_dependencies[i] );
} }
if( outcome_file != NULL ) if( outcome_file != NULL )