Reject overlong host type and field names
Some checks failed
akbasic CI Build / cmake_build (push) Has been cancelled
akbasic CI Build / sanitizers (push) Has been cancelled
akbasic CI Build / coverage (push) Has been cancelled
akbasic CI Build / akgl_build (push) Has been cancelled
akbasic CI Build / mutation_test (push) Has been cancelled
Some checks failed
akbasic CI Build / cmake_build (push) Has been cancelled
akbasic CI Build / sanitizers (push) Has been cancelled
akbasic CI Build / coverage (push) Has been cancelled
akbasic CI Build / akgl_build (push) Has been cancelled
akbasic CI Build / mutation_test (push) Has been cancelled
Co-authored-by: Andrew Kesterson <andrew@starfort.tech>
This commit is contained in:
@@ -208,6 +208,72 @@ static void test_suffix_must_match_the_c_type(void)
|
||||
harness_stop();
|
||||
}
|
||||
|
||||
/** @brief Host names use the same bounded storage as script-declared names. */
|
||||
static void test_registration_name_limits(void)
|
||||
{
|
||||
static const akbasic_HostField SHORT_FIELD[] = {
|
||||
AKBASIC_HOST_FIELD( test_Enemy, hp, "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234#",
|
||||
AKBASIC_HOSTFIELD_INT32 )
|
||||
};
|
||||
static const akbasic_HostField LONG_FIELD_A[] = {
|
||||
AKBASIC_HOST_FIELD( test_Enemy, hp, "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456A#",
|
||||
AKBASIC_HOSTFIELD_INT32 )
|
||||
};
|
||||
static const akbasic_HostField LONG_FIELD_B[] = {
|
||||
AKBASIC_HOST_FIELD( test_Enemy, hp, "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456B#",
|
||||
AKBASIC_HOSTFIELD_INT32 )
|
||||
};
|
||||
static const akbasic_HostType SHORT_TYPE = {
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ12345", sizeof(test_Enemy), SHORT_FIELD, 1
|
||||
};
|
||||
static const akbasic_HostType LONG_TYPE_A = {
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ123456A", sizeof(test_Enemy), SHORT_FIELD, 1
|
||||
};
|
||||
static const akbasic_HostType LONG_TYPE_B = {
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZ123456B", sizeof(test_Enemy), SHORT_FIELD, 1
|
||||
};
|
||||
static const akbasic_HostType LONG_FIELD_TYPE_A = {
|
||||
"LONGFIELDA", sizeof(test_Enemy), LONG_FIELD_A, 1
|
||||
};
|
||||
static const akbasic_HostType LONG_FIELD_TYPE_B = {
|
||||
"LONGFIELDB", sizeof(test_Enemy), LONG_FIELD_B, 1
|
||||
};
|
||||
akerr_ErrorContext *raised = NULL;
|
||||
|
||||
TEST_REQUIRE_OK(harness_start(NULL));
|
||||
TEST_REQUIRE_OK(akbasic_host_register_type(&HARNESS_RUNTIME, &SHORT_TYPE));
|
||||
harness_stop();
|
||||
|
||||
TEST_REQUIRE_OK(harness_start(NULL));
|
||||
raised = akbasic_host_register_type(&HARNESS_RUNTIME, &LONG_TYPE_A);
|
||||
TEST_REQUIRE(raised != NULL, "an overlong type name must be refused");
|
||||
TEST_REQUIRE_INT(raised->status, AKERR_OUTOFBOUNDS);
|
||||
test_discard_error(raised);
|
||||
raised = akbasic_host_register_type(&HARNESS_RUNTIME, &LONG_TYPE_B);
|
||||
TEST_REQUIRE(raised != NULL, "a second long type name must fail cleanly");
|
||||
TEST_REQUIRE_INT(raised->status, AKERR_OUTOFBOUNDS);
|
||||
test_discard_error(raised);
|
||||
harness_stop();
|
||||
|
||||
TEST_REQUIRE_OK(harness_start(NULL));
|
||||
TEST_REQUIRE_OK(akbasic_host_register_type(&HARNESS_RUNTIME,
|
||||
&(akbasic_HostType){
|
||||
"SHORTFIELDS", sizeof(test_Enemy), SHORT_FIELD, 1
|
||||
}));
|
||||
harness_stop();
|
||||
|
||||
TEST_REQUIRE_OK(harness_start(NULL));
|
||||
raised = akbasic_host_register_type(&HARNESS_RUNTIME, &LONG_FIELD_TYPE_A);
|
||||
TEST_REQUIRE(raised != NULL, "an overlong field name must be refused");
|
||||
TEST_REQUIRE_INT(raised->status, AKERR_OUTOFBOUNDS);
|
||||
test_discard_error(raised);
|
||||
raised = akbasic_host_register_type(&HARNESS_RUNTIME, &LONG_FIELD_TYPE_B);
|
||||
TEST_REQUIRE(raised != NULL, "a second long field name must fail cleanly");
|
||||
TEST_REQUIRE_INT(raised->status, AKERR_OUTOFBOUNDS);
|
||||
test_discard_error(raised);
|
||||
harness_stop();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief After unbinding, the name is refused rather than read.
|
||||
*
|
||||
@@ -258,6 +324,7 @@ int main(void)
|
||||
test_conversion_refuses_rather_than_truncates();
|
||||
test_copy_versus_point();
|
||||
test_suffix_must_match_the_c_type();
|
||||
test_registration_name_limits();
|
||||
test_unbind_refuses_later_reads();
|
||||
test_registration_survives_a_rerun();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user