mirror of
https://git.suyu.dev/suyu/mbedtls.git
synced 2025-12-24 00:06:32 +01:00
Merge 'development' into development
This commit is contained in:
commit
938f65c452
9 changed files with 266 additions and 25 deletions
|
|
@ -77,7 +77,7 @@ close(TEST_HELPERS);
|
|||
open(TEST_MAIN, "$test_main_file") or die "Opening test main '$test_main_file': $!";
|
||||
my @test_main_lines = split/^/, <TEST_MAIN>;
|
||||
my $test_main;
|
||||
my $index = 1;
|
||||
my $index = 2;
|
||||
for my $line (@test_main_lines) {
|
||||
$line =~ s/!LINE_NO!/$index/;
|
||||
$test_main = $test_main.$line;
|
||||
|
|
@ -88,13 +88,20 @@ close(TEST_MAIN);
|
|||
open(TEST_CASES, "$test_case_file") or die "Opening test cases '$test_case_file': $!";
|
||||
my @test_cases_lines = split/^/, <TEST_CASES>;
|
||||
my $test_cases;
|
||||
my $index = 1;
|
||||
my $index = 2;
|
||||
for my $line (@test_cases_lines) {
|
||||
if ($line =~ /^\/\* BEGIN_SUITE_HELPERS .*\*\//)
|
||||
{
|
||||
$line = $line."#line $index \"$test_case_file\"\n";
|
||||
}
|
||||
|
||||
if ($line =~ /^\/\* BEGIN_CASE .*\*\//)
|
||||
{
|
||||
$line = $line."#line $index \"$test_case_file\"\n";
|
||||
}
|
||||
|
||||
$line =~ s/!LINE_NO!/$index/;
|
||||
|
||||
$test_cases = $test_cases.$line;
|
||||
$index++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ typedef UINT32 uint32_t;
|
|||
do { \
|
||||
if( ! (TEST) ) \
|
||||
{ \
|
||||
test_fail( #TEST ); \
|
||||
test_fail( #TEST, __LINE__, __FILE__ ); \
|
||||
goto exit; \
|
||||
} \
|
||||
} while( 0 )
|
||||
|
|
@ -348,11 +348,11 @@ static int rnd_pseudo_rand( void *rng_state, unsigned char *output, size_t len )
|
|||
return( 0 );
|
||||
}
|
||||
|
||||
static void test_fail( const char *test )
|
||||
static void test_fail( const char *test, int line_no, const char* filename )
|
||||
{
|
||||
test_errors++;
|
||||
if( test_errors == 1 )
|
||||
mbedtls_printf( "FAILED\n" );
|
||||
mbedtls_printf( " %s\n", test );
|
||||
mbedtls_printf( " %s\n at line %d, %s\n", test, line_no, filename );
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,2 +1,18 @@
|
|||
Memory buffer alloc self test
|
||||
mbedtls_memory_buffer_alloc_self_test:
|
||||
|
||||
Memory buffer alloc - free in middle, alloc at end
|
||||
memory_buffer_alloc_free_alloc:100:100:100:0:0:1:0:0:200:0
|
||||
|
||||
Memory buffer alloc - free in middle, realloc
|
||||
memory_buffer_alloc_free_alloc:100:100:100:0:0:1:0:0:100:0
|
||||
|
||||
Memory buffer alloc - free in middle, merge, realloc
|
||||
memory_buffer_alloc_free_alloc:100:100:100:100:0:1:1:0:201:0
|
||||
|
||||
Memory buffer alloc - free at end, merge, realloc
|
||||
memory_buffer_alloc_free_alloc:100:64:100:100:0:0:0:1:200:0
|
||||
|
||||
Memory buffer alloc - Out of Memory test
|
||||
memory_buffer_alloc_oom_test:
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
/* BEGIN_HEADER */
|
||||
#include "mbedtls/memory_buffer_alloc.h"
|
||||
#define TEST_SUITE_MEMORY_BUFFER_ALLOC
|
||||
|
||||
/* END_HEADER */
|
||||
|
||||
/* BEGIN_DEPENDENCIES
|
||||
|
|
@ -8,9 +9,226 @@
|
|||
* END_DEPENDENCIES
|
||||
*/
|
||||
|
||||
/* BEGIN_SUITE_HELPERS */
|
||||
static int check_pointer( void *p )
|
||||
{
|
||||
if( p == NULL )
|
||||
return( -1 );
|
||||
|
||||
if( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 )
|
||||
return( -1 );
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
/* END_SUITE_HELPERS */
|
||||
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
|
||||
void mbedtls_memory_buffer_alloc_self_test( )
|
||||
{
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_self_test( 0 ) == 0 );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
|
||||
void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
|
||||
int d_bytes,
|
||||
int free_a, int free_b, int free_c,
|
||||
int free_d,
|
||||
int e_bytes, int f_bytes )
|
||||
{
|
||||
unsigned char buf[1024];
|
||||
unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL, *ptr_d = NULL,
|
||||
*ptr_e = NULL, *ptr_f = NULL;
|
||||
|
||||
size_t reported_blocks;
|
||||
size_t allocated_bytes = 0, reported_bytes;
|
||||
|
||||
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
|
||||
|
||||
mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS );
|
||||
|
||||
if( a_bytes > 0 )
|
||||
{
|
||||
ptr_a = mbedtls_calloc( a_bytes, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_a ) == 0 );
|
||||
|
||||
allocated_bytes += a_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
if( b_bytes > 0 )
|
||||
{
|
||||
ptr_b = mbedtls_calloc( b_bytes, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_b ) == 0 );
|
||||
|
||||
allocated_bytes += b_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
if( c_bytes > 0 )
|
||||
{
|
||||
ptr_c = mbedtls_calloc( c_bytes, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_c ) == 0 );
|
||||
|
||||
allocated_bytes += c_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
if( d_bytes > 0 )
|
||||
{
|
||||
ptr_d = mbedtls_calloc( d_bytes, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_d ) == 0 );
|
||||
|
||||
allocated_bytes += d_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||
TEST_ASSERT( reported_bytes == allocated_bytes );
|
||||
|
||||
if( free_a )
|
||||
{
|
||||
mbedtls_free( ptr_a );
|
||||
ptr_a = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
allocated_bytes -= a_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
if( free_b )
|
||||
{
|
||||
mbedtls_free( ptr_b );
|
||||
ptr_b = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
allocated_bytes -= b_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
if( free_c )
|
||||
{
|
||||
mbedtls_free( ptr_c );
|
||||
ptr_c = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
allocated_bytes -= c_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
if( free_d )
|
||||
{
|
||||
mbedtls_free( ptr_d );
|
||||
ptr_d = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
allocated_bytes -= d_bytes * sizeof(char);
|
||||
}
|
||||
|
||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||
TEST_ASSERT( reported_bytes == allocated_bytes );
|
||||
|
||||
if( e_bytes > 0 )
|
||||
{
|
||||
ptr_e = mbedtls_calloc( e_bytes, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_e ) == 0 );
|
||||
}
|
||||
|
||||
if( f_bytes > 0 )
|
||||
{
|
||||
ptr_f = mbedtls_calloc( f_bytes, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_f ) == 0 );
|
||||
}
|
||||
|
||||
/* Once blocks are reallocated, the block allocated to the memory request
|
||||
* may be bigger than the request itself, which is indicated by the reported
|
||||
* bytes, and makes it hard to know what the reported size will be, so
|
||||
* we don't check the size after blocks have been reallocated. */
|
||||
|
||||
if( ptr_a != NULL )
|
||||
{
|
||||
mbedtls_free( ptr_a );
|
||||
ptr_a = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
}
|
||||
|
||||
if( ptr_b != NULL )
|
||||
{
|
||||
mbedtls_free( ptr_b );
|
||||
ptr_b = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
}
|
||||
|
||||
if( ptr_c != NULL )
|
||||
{
|
||||
mbedtls_free( ptr_c );
|
||||
ptr_c = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
}
|
||||
|
||||
if( ptr_d != NULL )
|
||||
{
|
||||
mbedtls_free( ptr_d );
|
||||
ptr_d = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
}
|
||||
|
||||
if( ptr_e != NULL )
|
||||
{
|
||||
mbedtls_free( ptr_e );
|
||||
ptr_e = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
}
|
||||
|
||||
if( ptr_f != NULL )
|
||||
{
|
||||
mbedtls_free( ptr_f );
|
||||
ptr_f = NULL;
|
||||
}
|
||||
|
||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||
TEST_ASSERT( reported_bytes == 0 );
|
||||
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
exit:
|
||||
mbedtls_memory_buffer_alloc_free( );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
/* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
|
||||
void memory_buffer_alloc_oom_test()
|
||||
{
|
||||
unsigned char buf[1024];
|
||||
unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL;
|
||||
size_t reported_blocks, reported_bytes;
|
||||
|
||||
(void)ptr_c;
|
||||
|
||||
mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
|
||||
|
||||
mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS );
|
||||
|
||||
ptr_a = mbedtls_calloc( 432, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_a ) == 0 );
|
||||
|
||||
ptr_b = mbedtls_calloc( 432, sizeof(char) );
|
||||
TEST_ASSERT( check_pointer( ptr_b ) == 0 );
|
||||
|
||||
ptr_c = mbedtls_calloc( 431, sizeof(char) );
|
||||
TEST_ASSERT( ptr_c == NULL );
|
||||
|
||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||
TEST_ASSERT( reported_bytes >= 864 && reported_bytes <= sizeof(buf) );
|
||||
|
||||
mbedtls_free( ptr_a );
|
||||
ptr_a = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
mbedtls_free( ptr_b );
|
||||
ptr_b = NULL;
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
|
||||
TEST_ASSERT( reported_bytes == 0 );
|
||||
|
||||
TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
|
||||
|
||||
exit:
|
||||
mbedtls_memory_buffer_alloc_free( );
|
||||
}
|
||||
/* END_CASE */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue