xref: /llvm-project/compiler-rt/test/fuzzer/InitializeTest.cpp (revision 02f3ad81c3dea59e5fde8adaab0bdd265bc94e8e)
110ab2aceSGeorge Karpenkov // This file is distributed under the University of Illinois Open Source
210ab2aceSGeorge Karpenkov // License. See LICENSE.TXT for details.
310ab2aceSGeorge Karpenkov 
410ab2aceSGeorge Karpenkov // Make sure LLVMFuzzerInitialize is called.
510ab2aceSGeorge Karpenkov #include <assert.h>
610ab2aceSGeorge Karpenkov #include <stddef.h>
710ab2aceSGeorge Karpenkov #include <stdint.h>
810ab2aceSGeorge Karpenkov #include <stdio.h>
910ab2aceSGeorge Karpenkov #include <stdlib.h>
1010ab2aceSGeorge Karpenkov #include <string.h>
1110ab2aceSGeorge Karpenkov 
12*02f3ad81SMatt Morehouse static char *argv0 = NULL;
1310ab2aceSGeorge Karpenkov 
1410ab2aceSGeorge Karpenkov extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
1510ab2aceSGeorge Karpenkov   assert(*argc > 0);
1610ab2aceSGeorge Karpenkov   argv0 = **argv;
1710ab2aceSGeorge Karpenkov   fprintf(stderr, "LLVMFuzzerInitialize: %s\n", argv0);
1810ab2aceSGeorge Karpenkov   return 0;
1910ab2aceSGeorge Karpenkov }
2010ab2aceSGeorge Karpenkov 
2110ab2aceSGeorge Karpenkov extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
22d3e4b7e2SKostya Serebryany   assert(argv0);
23*02f3ad81SMatt Morehouse   if (argv0 && Size >= 4 && !memcmp(Data, "fuzz", 4)) {
2410ab2aceSGeorge Karpenkov     fprintf(stderr, "BINGO %s\n", argv0);
2510ab2aceSGeorge Karpenkov     exit(1);
2610ab2aceSGeorge Karpenkov   }
2710ab2aceSGeorge Karpenkov   return 0;
2810ab2aceSGeorge Karpenkov }
29