// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // Test whether calling certain libFuzzer's interceptors inside allocators // does not cause an assertion failure. #include #include #include #include #include #include #include static const char *buf1 = "aaaa"; static const char *buf2 = "bbbb"; static void callFuzzerInterceptors(const char *prefix) { int memcmp_result = memcmp(buf1, buf2, 4); if (memcmp_result != 0) { fprintf(stderr, "%s-MEMCMP\n", prefix); } int strncmp_result = strncmp(buf1, buf2, 4); if (strncmp_result != 0) { fprintf(stderr, "%s-STRNCMP\n", prefix); } int strcmp_result = strcmp(buf1, buf2); if (strcmp_result != 0) { fprintf(stderr, "%s-STRCMP\n", prefix); } const char *strstr_result = strstr(buf1, buf2); if (strstr_result == nullptr) { fprintf(stderr, "%s-STRSTR\n", prefix); } } extern "C" void *__libc_calloc(size_t, size_t); extern "C" void *calloc(size_t n, size_t elem_size) { static bool CalledOnce = false; if (!CalledOnce) { callFuzzerInterceptors("CALLOC"); CalledOnce = true; } return __libc_calloc(n, elem_size); }