Allow more signed integer types in test function arguments

Now that the C code supports the full range of intmax_t, allow any size of
signed integer type in the .data file parser.

Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
Gilles Peskine 2022-12-04 15:57:49 +01:00
parent 872948cc72
commit 6f5082bf4d
4 changed files with 49 additions and 5 deletions

View File

@ -171,8 +171,23 @@ import string
import argparse import argparse
# Types regognized as integer arguments in test functions. # Types regognized as signed integer arguments in test functions.
INTEGER_TYPES = frozenset(['int']) SIGNED_INTEGER_TYPES = frozenset([
'char',
'short',
'short int',
'int',
'int8_t',
'int16_t',
'int32_t',
'int64_t',
'intmax_t',
'long',
'long int',
'long long int',
'mbedtls_mpi_sint',
'psa_status_t',
])
# Types recognized as string arguments in test functions. # Types recognized as string arguments in test functions.
STRING_TYPES = frozenset(['char*', 'const char*', 'char const*']) STRING_TYPES = frozenset(['char*', 'const char*', 'char const*'])
# Types recognized as hex data arguments in test functions. # Types recognized as hex data arguments in test functions.
@ -471,7 +486,7 @@ def parse_function_argument(arg, arg_idx, args, local_vars, args_dispatch):
# E.g. "int x[42]" # E.g. "int x[42]"
return None return None
typ, _ = m.groups() typ, _ = m.groups()
if typ in INTEGER_TYPES: if typ in SIGNED_INTEGER_TYPES:
args.append('int') args.append('int')
args_dispatch.append('((mbedtls_test_argument_t*)params[%d])->sint' % arg_idx) args_dispatch.append('((mbedtls_test_argument_t*)params[%d])->sint' % arg_idx)
return 1 return 1

View File

@ -507,10 +507,10 @@ class ParseFuncSignature(TestCase):
def test_unsupported_arg(self): def test_unsupported_arg(self):
""" """
Test unsupported arguments (not among int, char * and data_t) Test unsupported argument type
:return: :return:
""" """
line = 'void entropy_threshold( char * a, data_t * h, char result )' line = 'void entropy_threshold( char * a, data_t * h, unknown_t result )'
self.assertRaises(ValueError, parse_function_arguments, line) self.assertRaises(ValueError, parse_function_arguments, line)
def test_empty_params(self): def test_empty_params(self):

View File

@ -56,6 +56,10 @@ printf_int:"%d":-2147483648:"-2147483648"
printf "%d", -0x80000000 printf "%d", -0x80000000
printf_int:"%d":-0x80000000:"-2147483648" printf_int:"%d":-0x80000000:"-2147483648"
# Test that LONG_MAX is coming out untruncated through the test framework.
printf "%lx", LONG_MAX
printf_long_max:"%lx":LONG_MAX
# The next few test cases exercise how the test framework handles special # The next few test cases exercise how the test framework handles special
# characters in strings. # characters in strings.
printf "%c", SPACE, SPACE printf "%c", SPACE, SPACE

View File

@ -31,6 +31,31 @@ exit:
} }
/* END_CASE */ /* END_CASE */
/* BEGIN_CASE */
void printf_long_max(const char *format, long value)
{
char *expected = NULL;
char *output = NULL;
/* "0x" plus 2 hex digits per byte */
const size_t n = sizeof(value) * 2;
/* We assume that long has no padding bits! */
ASSERT_ALLOC(expected, n + 1);
expected[0] = '7';
memset(expected + 1, 'f', sizeof(value) * 2 - 1);
ASSERT_ALLOC(output, n + 1);
TEST_EQUAL(n, mbedtls_snprintf(output, n + 1, format, value));
ASSERT_COMPARE(expected, n + 1, output, n + 1);
mbedtls_free(output);
output = NULL;
exit:
mbedtls_free(output);
mbedtls_free(expected);
}
/* END_CASE */
/* BEGIN_CASE */ /* BEGIN_CASE */
void printf_char2(char *format, int arg1, int arg2, char *result) void printf_char2(char *format, int arg1, int arg2, char *result)
{ {