41 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// Simple test for a cutom mutator that results in long sequences of mutations.6#include <assert.h>7#include <cstddef>8#include <cstdint>9#include <cstdlib>10#include <iostream>11#include <ostream>12 13#include "FuzzerInterface.h"14 15static volatile int Sink;16 17extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {18 assert(Data);19 if (Size > 0 && Data[0] == 'H') {20 Sink = 1;21 if (Size > 1 && Data[1] == 'i') {22 Sink = 2;23 if (Size > 2 && Data[2] == '!') {24 std::cout << "BINGO; Found the target, exiting\n"25 << std::flush;26 exit(1);27 }28 }29 }30 return 0;31}32 33extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size,34 size_t MaxSize, unsigned int Seed) {35 // Run this 25 times to generate a large mutation sequence.36 for (size_t i = 0; i < 25; i++) {37 LLVMFuzzerMutate(Data, Size, MaxSize);38 }39 return LLVMFuzzerMutate(Data, Size, MaxSize);40}41