test: enable allocator_may_return_null=1 for calloc with ENOMEM test

This commit is contained in:
Azat Khuzhin 2023-02-12 17:05:20 +01:00
parent 207ea62bf9
commit 1df2a5a69e
2 changed files with 17 additions and 6 deletions

View File

@ -134,8 +134,10 @@ jobs:
export CTEST_PARALLEL_LEVEL=$JOBS export CTEST_PARALLEL_LEVEL=$JOBS
export CTEST_OUTPUT_ON_FAILURE=1 export CTEST_OUTPUT_ON_FAILURE=1
export TSAN_OPTIONS=suppressions=$PWD/extra/tsan.supp # Enable allocator_may_return_null for test_event_calloc_enomem
export TSAN_OPTIONS=suppressions=$PWD/extra/tsan.supp:allocator_may_return_null=1
export LSAN_OPTIONS=suppressions=$PWD/extra/lsan.supp export LSAN_OPTIONS=suppressions=$PWD/extra/lsan.supp
export ASAN_OPTIONS=allocator_may_return_null=1
if [ "${{ matrix.EVENT_MATRIX }}" == "DIST" ]; then if [ "${{ matrix.EVENT_MATRIX }}" == "DIST" ]; then
cd dist cd dist

View File

@ -1310,6 +1310,17 @@ test_event_calloc(void *arg)
mm_free(p); mm_free(p);
p = NULL; p = NULL;
end:
errno = 0;
if (p)
mm_free(p);
}
static void
test_event_calloc_enomem(void *arg)
{
void *p = NULL;
/* mm_calloc() should set errno = ENOMEM and return NULL /* mm_calloc() should set errno = ENOMEM and return NULL
* in case of potential overflow. */ * in case of potential overflow. */
errno = 0; errno = 0;
@ -1318,6 +1329,7 @@ test_event_calloc(void *arg)
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Walloc-size-larger-than=" #pragma GCC diagnostic ignored "-Walloc-size-larger-than="
#endif #endif
/* Requires allocator_may_return_null=1 for sanitizers */
p = mm_calloc(EV_SIZE_MAX, EV_SIZE_MAX); p = mm_calloc(EV_SIZE_MAX, EV_SIZE_MAX);
#if defined(__clang__) #if defined(__clang__)
#elif defined(__GNUC__) #elif defined(__GNUC__)
@ -1327,11 +1339,7 @@ test_event_calloc(void *arg)
tt_int_op(errno, ==, ENOMEM); tt_int_op(errno, ==, ENOMEM);
end: end:
errno = 0; ;
if (p)
mm_free(p);
return;
} }
static void static void
@ -1857,6 +1865,7 @@ struct testcase_t util_testcases[] = {
#endif #endif
{ "mm_malloc", test_event_malloc, 0, NULL, NULL }, { "mm_malloc", test_event_malloc, 0, NULL, NULL },
{ "mm_calloc", test_event_calloc, 0, NULL, NULL }, { "mm_calloc", test_event_calloc, 0, NULL, NULL },
{ "mm_calloc_enomem", test_event_calloc_enomem, 0, NULL, NULL },
{ "mm_strdup", test_event_strdup, 0, NULL, NULL }, { "mm_strdup", test_event_strdup, 0, NULL, NULL },
{ "usleep", test_evutil_usleep, TT_RETRIABLE, NULL, NULL }, { "usleep", test_evutil_usleep, TT_RETRIABLE, NULL, NULL },
{ "monotonic_res", test_evutil_monotonic_res, 0, &basic_setup, (void*)"" }, { "monotonic_res", test_evutil_monotonic_res, 0, &basic_setup, (void*)"" },