mbed TLS Build
tests/suites/test_suite_memory_buffer_alloc.function@1:1a219dea6cb5, 2019-06-04 (annotated)
- Committer:
- williequesada
- Date:
- Tue Jun 04 16:03:38 2019 +0000
- Revision:
- 1:1a219dea6cb5
- Parent:
- 0:cdf462088d13
compartir a Pablo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
markrad | 0:cdf462088d13 | 1 | /* BEGIN_HEADER */ |
markrad | 0:cdf462088d13 | 2 | #include "mbedtls/memory_buffer_alloc.h" |
markrad | 0:cdf462088d13 | 3 | #define TEST_SUITE_MEMORY_BUFFER_ALLOC |
markrad | 0:cdf462088d13 | 4 | |
markrad | 0:cdf462088d13 | 5 | /* END_HEADER */ |
markrad | 0:cdf462088d13 | 6 | |
markrad | 0:cdf462088d13 | 7 | /* BEGIN_DEPENDENCIES |
markrad | 0:cdf462088d13 | 8 | * depends_on:MBEDTLS_MEMORY_BUFFER_ALLOC_C |
markrad | 0:cdf462088d13 | 9 | * END_DEPENDENCIES |
markrad | 0:cdf462088d13 | 10 | */ |
markrad | 0:cdf462088d13 | 11 | |
markrad | 0:cdf462088d13 | 12 | /* BEGIN_SUITE_HELPERS */ |
markrad | 0:cdf462088d13 | 13 | static int check_pointer( void *p ) |
markrad | 0:cdf462088d13 | 14 | { |
markrad | 0:cdf462088d13 | 15 | if( p == NULL ) |
markrad | 0:cdf462088d13 | 16 | return( -1 ); |
markrad | 0:cdf462088d13 | 17 | |
markrad | 0:cdf462088d13 | 18 | if( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 ) |
markrad | 0:cdf462088d13 | 19 | return( -1 ); |
markrad | 0:cdf462088d13 | 20 | |
markrad | 0:cdf462088d13 | 21 | return( 0 ); |
markrad | 0:cdf462088d13 | 22 | } |
markrad | 0:cdf462088d13 | 23 | /* END_SUITE_HELPERS */ |
markrad | 0:cdf462088d13 | 24 | |
markrad | 0:cdf462088d13 | 25 | /* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */ |
markrad | 0:cdf462088d13 | 26 | void mbedtls_memory_buffer_alloc_self_test( ) |
markrad | 0:cdf462088d13 | 27 | { |
markrad | 0:cdf462088d13 | 28 | TEST_ASSERT( mbedtls_memory_buffer_alloc_self_test( 1 ) == 0 ); |
markrad | 0:cdf462088d13 | 29 | } |
markrad | 0:cdf462088d13 | 30 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 31 | |
markrad | 0:cdf462088d13 | 32 | /* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */ |
markrad | 0:cdf462088d13 | 33 | void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes, |
markrad | 0:cdf462088d13 | 34 | int d_bytes, |
markrad | 0:cdf462088d13 | 35 | int free_a, int free_b, int free_c, |
markrad | 0:cdf462088d13 | 36 | int free_d, |
markrad | 0:cdf462088d13 | 37 | int e_bytes, int f_bytes ) |
markrad | 0:cdf462088d13 | 38 | { |
markrad | 0:cdf462088d13 | 39 | unsigned char buf[1024]; |
markrad | 0:cdf462088d13 | 40 | unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL, *ptr_d = NULL, |
markrad | 0:cdf462088d13 | 41 | *ptr_e = NULL, *ptr_f = NULL; |
markrad | 0:cdf462088d13 | 42 | |
markrad | 0:cdf462088d13 | 43 | size_t reported_blocks; |
markrad | 0:cdf462088d13 | 44 | size_t allocated_bytes = 0, reported_bytes; |
markrad | 0:cdf462088d13 | 45 | |
markrad | 0:cdf462088d13 | 46 | mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); |
markrad | 0:cdf462088d13 | 47 | |
markrad | 0:cdf462088d13 | 48 | mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS ); |
markrad | 0:cdf462088d13 | 49 | |
markrad | 0:cdf462088d13 | 50 | if( a_bytes > 0 ) |
markrad | 0:cdf462088d13 | 51 | { |
markrad | 0:cdf462088d13 | 52 | ptr_a = mbedtls_calloc( a_bytes, sizeof(char) ); |
markrad | 0:cdf462088d13 | 53 | TEST_ASSERT( check_pointer( ptr_a ) == 0 ); |
markrad | 0:cdf462088d13 | 54 | |
markrad | 0:cdf462088d13 | 55 | allocated_bytes += a_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 56 | } |
markrad | 0:cdf462088d13 | 57 | |
markrad | 0:cdf462088d13 | 58 | if( b_bytes > 0 ) |
markrad | 0:cdf462088d13 | 59 | { |
markrad | 0:cdf462088d13 | 60 | ptr_b = mbedtls_calloc( b_bytes, sizeof(char) ); |
markrad | 0:cdf462088d13 | 61 | TEST_ASSERT( check_pointer( ptr_b ) == 0 ); |
markrad | 0:cdf462088d13 | 62 | |
markrad | 0:cdf462088d13 | 63 | allocated_bytes += b_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 64 | } |
markrad | 0:cdf462088d13 | 65 | |
markrad | 0:cdf462088d13 | 66 | if( c_bytes > 0 ) |
markrad | 0:cdf462088d13 | 67 | { |
markrad | 0:cdf462088d13 | 68 | ptr_c = mbedtls_calloc( c_bytes, sizeof(char) ); |
markrad | 0:cdf462088d13 | 69 | TEST_ASSERT( check_pointer( ptr_c ) == 0 ); |
markrad | 0:cdf462088d13 | 70 | |
markrad | 0:cdf462088d13 | 71 | allocated_bytes += c_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 72 | } |
markrad | 0:cdf462088d13 | 73 | |
markrad | 0:cdf462088d13 | 74 | if( d_bytes > 0 ) |
markrad | 0:cdf462088d13 | 75 | { |
markrad | 0:cdf462088d13 | 76 | ptr_d = mbedtls_calloc( d_bytes, sizeof(char) ); |
markrad | 0:cdf462088d13 | 77 | TEST_ASSERT( check_pointer( ptr_d ) == 0 ); |
markrad | 0:cdf462088d13 | 78 | |
markrad | 0:cdf462088d13 | 79 | allocated_bytes += d_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 80 | } |
markrad | 0:cdf462088d13 | 81 | |
markrad | 0:cdf462088d13 | 82 | mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); |
markrad | 0:cdf462088d13 | 83 | TEST_ASSERT( reported_bytes == allocated_bytes ); |
markrad | 0:cdf462088d13 | 84 | |
markrad | 0:cdf462088d13 | 85 | if( free_a ) |
markrad | 0:cdf462088d13 | 86 | { |
markrad | 0:cdf462088d13 | 87 | mbedtls_free( ptr_a ); |
markrad | 0:cdf462088d13 | 88 | ptr_a = NULL; |
markrad | 0:cdf462088d13 | 89 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 90 | |
markrad | 0:cdf462088d13 | 91 | allocated_bytes -= a_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 92 | } |
markrad | 0:cdf462088d13 | 93 | |
markrad | 0:cdf462088d13 | 94 | if( free_b ) |
markrad | 0:cdf462088d13 | 95 | { |
markrad | 0:cdf462088d13 | 96 | mbedtls_free( ptr_b ); |
markrad | 0:cdf462088d13 | 97 | ptr_b = NULL; |
markrad | 0:cdf462088d13 | 98 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 99 | |
markrad | 0:cdf462088d13 | 100 | allocated_bytes -= b_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 101 | } |
markrad | 0:cdf462088d13 | 102 | |
markrad | 0:cdf462088d13 | 103 | if( free_c ) |
markrad | 0:cdf462088d13 | 104 | { |
markrad | 0:cdf462088d13 | 105 | mbedtls_free( ptr_c ); |
markrad | 0:cdf462088d13 | 106 | ptr_c = NULL; |
markrad | 0:cdf462088d13 | 107 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 108 | |
markrad | 0:cdf462088d13 | 109 | allocated_bytes -= c_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 110 | } |
markrad | 0:cdf462088d13 | 111 | |
markrad | 0:cdf462088d13 | 112 | if( free_d ) |
markrad | 0:cdf462088d13 | 113 | { |
markrad | 0:cdf462088d13 | 114 | mbedtls_free( ptr_d ); |
markrad | 0:cdf462088d13 | 115 | ptr_d = NULL; |
markrad | 0:cdf462088d13 | 116 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 117 | |
markrad | 0:cdf462088d13 | 118 | allocated_bytes -= d_bytes * sizeof(char); |
markrad | 0:cdf462088d13 | 119 | } |
markrad | 0:cdf462088d13 | 120 | |
markrad | 0:cdf462088d13 | 121 | mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); |
markrad | 0:cdf462088d13 | 122 | TEST_ASSERT( reported_bytes == allocated_bytes ); |
markrad | 0:cdf462088d13 | 123 | |
markrad | 0:cdf462088d13 | 124 | if( e_bytes > 0 ) |
markrad | 0:cdf462088d13 | 125 | { |
markrad | 0:cdf462088d13 | 126 | ptr_e = mbedtls_calloc( e_bytes, sizeof(char) ); |
markrad | 0:cdf462088d13 | 127 | TEST_ASSERT( check_pointer( ptr_e ) == 0 ); |
markrad | 0:cdf462088d13 | 128 | } |
markrad | 0:cdf462088d13 | 129 | |
markrad | 0:cdf462088d13 | 130 | if( f_bytes > 0 ) |
markrad | 0:cdf462088d13 | 131 | { |
markrad | 0:cdf462088d13 | 132 | ptr_f = mbedtls_calloc( f_bytes, sizeof(char) ); |
markrad | 0:cdf462088d13 | 133 | TEST_ASSERT( check_pointer( ptr_f ) == 0 ); |
markrad | 0:cdf462088d13 | 134 | } |
markrad | 0:cdf462088d13 | 135 | |
markrad | 0:cdf462088d13 | 136 | /* Once blocks are reallocated, the block allocated to the memory request |
markrad | 0:cdf462088d13 | 137 | * may be bigger than the request itself, which is indicated by the reported |
markrad | 0:cdf462088d13 | 138 | * bytes, and makes it hard to know what the reported size will be, so |
markrad | 0:cdf462088d13 | 139 | * we don't check the size after blocks have been reallocated. */ |
markrad | 0:cdf462088d13 | 140 | |
markrad | 0:cdf462088d13 | 141 | if( ptr_a != NULL ) |
markrad | 0:cdf462088d13 | 142 | { |
markrad | 0:cdf462088d13 | 143 | mbedtls_free( ptr_a ); |
markrad | 0:cdf462088d13 | 144 | ptr_a = NULL; |
markrad | 0:cdf462088d13 | 145 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 146 | } |
markrad | 0:cdf462088d13 | 147 | |
markrad | 0:cdf462088d13 | 148 | if( ptr_b != NULL ) |
markrad | 0:cdf462088d13 | 149 | { |
markrad | 0:cdf462088d13 | 150 | mbedtls_free( ptr_b ); |
markrad | 0:cdf462088d13 | 151 | ptr_b = NULL; |
markrad | 0:cdf462088d13 | 152 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 153 | } |
markrad | 0:cdf462088d13 | 154 | |
markrad | 0:cdf462088d13 | 155 | if( ptr_c != NULL ) |
markrad | 0:cdf462088d13 | 156 | { |
markrad | 0:cdf462088d13 | 157 | mbedtls_free( ptr_c ); |
markrad | 0:cdf462088d13 | 158 | ptr_c = NULL; |
markrad | 0:cdf462088d13 | 159 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 160 | } |
markrad | 0:cdf462088d13 | 161 | |
markrad | 0:cdf462088d13 | 162 | if( ptr_d != NULL ) |
markrad | 0:cdf462088d13 | 163 | { |
markrad | 0:cdf462088d13 | 164 | mbedtls_free( ptr_d ); |
markrad | 0:cdf462088d13 | 165 | ptr_d = NULL; |
markrad | 0:cdf462088d13 | 166 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 167 | } |
markrad | 0:cdf462088d13 | 168 | |
markrad | 0:cdf462088d13 | 169 | if( ptr_e != NULL ) |
markrad | 0:cdf462088d13 | 170 | { |
markrad | 0:cdf462088d13 | 171 | mbedtls_free( ptr_e ); |
markrad | 0:cdf462088d13 | 172 | ptr_e = NULL; |
markrad | 0:cdf462088d13 | 173 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 174 | } |
markrad | 0:cdf462088d13 | 175 | |
markrad | 0:cdf462088d13 | 176 | if( ptr_f != NULL ) |
markrad | 0:cdf462088d13 | 177 | { |
markrad | 0:cdf462088d13 | 178 | mbedtls_free( ptr_f ); |
markrad | 0:cdf462088d13 | 179 | ptr_f = NULL; |
markrad | 0:cdf462088d13 | 180 | } |
markrad | 0:cdf462088d13 | 181 | |
markrad | 0:cdf462088d13 | 182 | mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); |
markrad | 0:cdf462088d13 | 183 | TEST_ASSERT( reported_bytes == 0 ); |
markrad | 0:cdf462088d13 | 184 | |
markrad | 0:cdf462088d13 | 185 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 186 | |
markrad | 0:cdf462088d13 | 187 | exit: |
markrad | 0:cdf462088d13 | 188 | mbedtls_memory_buffer_alloc_free( ); |
markrad | 0:cdf462088d13 | 189 | } |
markrad | 0:cdf462088d13 | 190 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 191 | |
markrad | 0:cdf462088d13 | 192 | /* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */ |
markrad | 0:cdf462088d13 | 193 | void memory_buffer_alloc_oom_test() |
markrad | 0:cdf462088d13 | 194 | { |
markrad | 0:cdf462088d13 | 195 | unsigned char buf[1024]; |
markrad | 0:cdf462088d13 | 196 | unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL; |
markrad | 0:cdf462088d13 | 197 | size_t reported_blocks, reported_bytes; |
markrad | 0:cdf462088d13 | 198 | |
markrad | 0:cdf462088d13 | 199 | (void)ptr_c; |
markrad | 0:cdf462088d13 | 200 | |
markrad | 0:cdf462088d13 | 201 | mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); |
markrad | 0:cdf462088d13 | 202 | |
markrad | 0:cdf462088d13 | 203 | mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS ); |
markrad | 0:cdf462088d13 | 204 | |
markrad | 0:cdf462088d13 | 205 | ptr_a = mbedtls_calloc( 432, sizeof(char) ); |
markrad | 0:cdf462088d13 | 206 | TEST_ASSERT( check_pointer( ptr_a ) == 0 ); |
markrad | 0:cdf462088d13 | 207 | |
markrad | 0:cdf462088d13 | 208 | ptr_b = mbedtls_calloc( 432, sizeof(char) ); |
markrad | 0:cdf462088d13 | 209 | TEST_ASSERT( check_pointer( ptr_b ) == 0 ); |
markrad | 0:cdf462088d13 | 210 | |
markrad | 0:cdf462088d13 | 211 | ptr_c = mbedtls_calloc( 431, sizeof(char) ); |
markrad | 0:cdf462088d13 | 212 | TEST_ASSERT( ptr_c == NULL ); |
markrad | 0:cdf462088d13 | 213 | |
markrad | 0:cdf462088d13 | 214 | mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); |
markrad | 0:cdf462088d13 | 215 | TEST_ASSERT( reported_bytes >= 864 && reported_bytes <= sizeof(buf) ); |
markrad | 0:cdf462088d13 | 216 | |
markrad | 0:cdf462088d13 | 217 | mbedtls_free( ptr_a ); |
markrad | 0:cdf462088d13 | 218 | ptr_a = NULL; |
markrad | 0:cdf462088d13 | 219 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 220 | |
markrad | 0:cdf462088d13 | 221 | mbedtls_free( ptr_b ); |
markrad | 0:cdf462088d13 | 222 | ptr_b = NULL; |
markrad | 0:cdf462088d13 | 223 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 224 | |
markrad | 0:cdf462088d13 | 225 | mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks ); |
markrad | 0:cdf462088d13 | 226 | TEST_ASSERT( reported_bytes == 0 ); |
markrad | 0:cdf462088d13 | 227 | |
markrad | 0:cdf462088d13 | 228 | TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 ); |
markrad | 0:cdf462088d13 | 229 | |
markrad | 0:cdf462088d13 | 230 | exit: |
markrad | 0:cdf462088d13 | 231 | mbedtls_memory_buffer_alloc_free( ); |
markrad | 0:cdf462088d13 | 232 | } |
markrad | 0:cdf462088d13 | 233 | /* END_CASE */ |
markrad | 0:cdf462088d13 | 234 |