diff --git a/src_features/signMessageEIP712/typed_data.c b/src_features/signMessageEIP712/typed_data.c index 7b10b08..1589994 100644 --- a/src_features/signMessageEIP712/typed_data.c +++ b/src_features/signMessageEIP712/typed_data.c @@ -659,6 +659,11 @@ static bool set_struct_field_array(const uint8_t *const data, return false; } *array_level = data[(*data_idx)++]; + if (*array_level > ARRAY_TYPES_COUNT) + { + apdu_response_code = APDU_RESPONSE_INVALID_DATA; + return false; + } switch (*array_level) { case ARRAY_DYNAMIC: // nothing to do diff --git a/src_features/signMessageEIP712/typed_data.h b/src_features/signMessageEIP712/typed_data.h index f8daa54..dd431f3 100644 --- a/src_features/signMessageEIP712/typed_data.h +++ b/src_features/signMessageEIP712/typed_data.h @@ -16,7 +16,8 @@ typedef enum { ARRAY_DYNAMIC = 0, - ARRAY_FIXED_SIZE + ARRAY_FIXED_SIZE, + ARRAY_TYPES_COUNT } e_array_type; typedef enum