summaryrefslogtreecommitdiff
path: root/tests/alloc_tests.c
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2025-09-29 04:20:40 +0000
committerXin LI <delphij@FreeBSD.org>2025-09-29 04:20:40 +0000
commita8fa7ccb47307fbf67141b5a6611456e2698dade (patch)
treee72c28bc8e376122f2a0df6c9c518180761d4ef1 /tests/alloc_tests.c
parent14feafd16d123e0c91b8b90998307d12b1347bb3 (diff)
Vendor import of expat 2.7.3.vendor/expat/2.7.3
Diffstat (limited to 'tests/alloc_tests.c')
-rw-r--r--tests/alloc_tests.c44
1 files changed, 33 insertions, 11 deletions
diff --git a/tests/alloc_tests.c b/tests/alloc_tests.c
index 644a49523c6e..5ae6c6a72025 100644
--- a/tests/alloc_tests.c
+++ b/tests/alloc_tests.c
@@ -2091,6 +2091,13 @@ START_TEST(test_alloc_reset_after_external_entity_parser_create_fail) {
}
END_TEST
+#if XML_GE == 1
+static size_t
+sizeRecordedFor(void *ptr) {
+ return *(size_t *)((char *)ptr - EXPAT_MALLOC_PADDING - sizeof(size_t));
+}
+#endif // XML_GE == 1
+
START_TEST(test_alloc_tracker_size_recorded) {
XML_Memory_Handling_Suite memsuite = {malloc, realloc, free};
@@ -2106,16 +2113,16 @@ START_TEST(test_alloc_tracker_size_recorded) {
void *ptr = expat_malloc(parser, 10, -1);
assert_true(ptr != NULL);
- assert_true(*((size_t *)ptr - 1) == 10);
+ assert_true(sizeRecordedFor(ptr) == 10);
assert_true(expat_realloc(parser, ptr, SIZE_MAX / 2, -1) == NULL);
- assert_true(*((size_t *)ptr - 1) == 10); // i.e. unchanged
+ assert_true(sizeRecordedFor(ptr) == 10); // i.e. unchanged
ptr = expat_realloc(parser, ptr, 20, -1);
assert_true(ptr != NULL);
- assert_true(*((size_t *)ptr - 1) == 20);
+ assert_true(sizeRecordedFor(ptr) == 20);
expat_free(parser, ptr, -1);
#endif
@@ -2125,6 +2132,22 @@ START_TEST(test_alloc_tracker_size_recorded) {
}
END_TEST
+START_TEST(test_alloc_tracker_pointer_alignment) {
+ XML_Parser parser = XML_ParserCreate(NULL);
+#if XML_GE == 1
+ assert_true(sizeof(long long) >= sizeof(size_t)); // self-test
+ long long *const ptr
+ = (long long *)expat_malloc(parser, 4 * sizeof(long long), -1);
+ ptr[0] = 0LL;
+ ptr[1] = 1LL;
+ ptr[2] = 2LL;
+ ptr[3] = 3LL;
+ expat_free(parser, ptr, -1);
+#endif
+ XML_ParserFree(parser);
+}
+END_TEST
+
START_TEST(test_alloc_tracker_maximum_amplification) {
if (g_reparseDeferralEnabledDefault == XML_TRUE) {
return;
@@ -2355,14 +2378,13 @@ make_alloc_test_case(Suite *s) {
tcase_add_test__ifdef_xml_dtd(
tc_alloc, test_alloc_reset_after_external_entity_parser_create_fail);
- tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_tracker_size_recorded);
- tcase_add_test__ifdef_xml_dtd(tc_alloc,
- test_alloc_tracker_maximum_amplification);
- tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_tracker_threshold);
- tcase_add_test__ifdef_xml_dtd(tc_alloc,
- test_alloc_tracker_getbuffer_unlimited);
- tcase_add_test__ifdef_xml_dtd(tc_alloc, test_alloc_tracker_api);
+ tcase_add_test__if_xml_ge(tc_alloc, test_alloc_tracker_size_recorded);
+ tcase_add_test__if_xml_ge(tc_alloc, test_alloc_tracker_pointer_alignment);
+ tcase_add_test__if_xml_ge(tc_alloc, test_alloc_tracker_maximum_amplification);
+ tcase_add_test__if_xml_ge(tc_alloc, test_alloc_tracker_threshold);
+ tcase_add_test__if_xml_ge(tc_alloc, test_alloc_tracker_getbuffer_unlimited);
+ tcase_add_test__if_xml_ge(tc_alloc, test_alloc_tracker_api);
tcase_add_test(tc_alloc, test_mem_api_cycle);
- tcase_add_test__ifdef_xml_dtd(tc_alloc, test_mem_api_unlimited);
+ tcase_add_test__if_xml_ge(tc_alloc, test_mem_api_unlimited);
}