brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · ebfa590 Raw
47 lines · cpp
1// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.2// See https://llvm.org/LICENSE.txt for license information.3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception4 5// Test whether calling certain libFuzzer's interceptors inside allocators6// does not cause an assertion failure.7#include <assert.h>8#include <cstddef>9#include <cstdint>10#include <cstdlib>11#include <cstring>12#include <iostream>13#include <malloc.h>14 15static const char *buf1 = "aaaa";16static const char *buf2 = "bbbb";17 18static void callFuzzerInterceptors(const char *prefix) {19  int memcmp_result = memcmp(buf1, buf2, 4);20  if (memcmp_result != 0) {21    fprintf(stderr, "%s-MEMCMP\n", prefix);22  }23  int strncmp_result = strncmp(buf1, buf2, 4);24  if (strncmp_result != 0) {25    fprintf(stderr, "%s-STRNCMP\n", prefix);26  }27  int strcmp_result = strcmp(buf1, buf2);28  if (strcmp_result != 0) {29    fprintf(stderr, "%s-STRCMP\n", prefix);30  }31  const char *strstr_result = strstr(buf1, buf2);32  if (strstr_result == nullptr) {33    fprintf(stderr, "%s-STRSTR\n", prefix);34  }35}36 37extern "C" void *__libc_calloc(size_t, size_t);38 39extern "C" void *calloc(size_t n, size_t elem_size) {40  static bool CalledOnce = false;41  if (!CalledOnce) {42    callFuzzerInterceptors("CALLOC");43    CalledOnce = true;44  }45  return __libc_calloc(n, elem_size);46}47