@@ -1379,14 +1379,24 @@ test_bson_vector_example_packed_bit_view (void)
1379
1379
} else \
1380
1380
((void) 0)
1381
1381
1382
+ #if defined(__USE_FORTIFY_LEVEL ) && __USE_FORTIFY_LEVEL > 0
1383
+ // Prevent memcpy size overflows even in dead code
1384
+ #define MAX_TESTABLE_COPY_COUNT (SIZE_MAX / 2u / sizeof (float))
1385
+ #else
1386
+ // Allow dead code to contain an oversized or overflowing memcpy
1387
+ #define MAX_TESTABLE_COPY_COUNT SIZE_MAX
1388
+ #endif
1389
+
1382
1390
#define TEST_BSON_VECTOR_EDGE_CASES_RW_COMMON (_view , _alloc_size , _v , _v_size , _read , _write ) \
1383
1391
if (true) { \
1384
1392
TEST_BSON_VECTOR_RW (false, (_view), (_v), (_alloc_size) + 1u, 0, (_read), (_write)); \
1385
1393
TEST_BSON_VECTOR_RW (true, (_view), (_v), (_v_size), (_alloc_size) - (_v_size), (_read), (_write)); \
1386
1394
TEST_BSON_VECTOR_RW (false, (_view), (_v), (_v_size), (_alloc_size) - (_v_size) + 1u, (_read), (_write)); \
1387
1395
TEST_BSON_VECTOR_RW (false, (_view), (_v), (_v_size) + 1u, (_alloc_size) - (_v_size), (_read), (_write)); \
1388
- TEST_BSON_VECTOR_RW (false, (_view), (_v), SIZE_MAX, (_alloc_size) - (_v_size), (_read), (_write)); \
1389
- TEST_BSON_VECTOR_RW (false, (_view), (_v), SIZE_MAX, (_alloc_size) - (_v_size) + 1u, (_read), (_write)); \
1396
+ TEST_BSON_VECTOR_RW ( \
1397
+ false, (_view), (_v), MAX_TESTABLE_COPY_COUNT, (_alloc_size) - (_v_size), (_read), (_write)); \
1398
+ TEST_BSON_VECTOR_RW ( \
1399
+ false, (_view), (_v), MAX_TESTABLE_COPY_COUNT, (_alloc_size) - (_v_size) + 1u, (_read), (_write)); \
1390
1400
TEST_BSON_VECTOR_RW (true, (_view), (_v), (_v_size), 0, (_read), (_write)); \
1391
1401
} else \
1392
1402
((void) 0)
0 commit comments