xref: /llvm-project/compiler-rt/test/fuzzer/InitializeTest.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
2*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
3*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
410ab2aceSGeorge Karpenkov 
510ab2aceSGeorge Karpenkov // Make sure LLVMFuzzerInitialize is called.
610ab2aceSGeorge Karpenkov #include <assert.h>
710ab2aceSGeorge Karpenkov #include <stddef.h>
810ab2aceSGeorge Karpenkov #include <stdint.h>
910ab2aceSGeorge Karpenkov #include <stdio.h>
1010ab2aceSGeorge Karpenkov #include <stdlib.h>
1110ab2aceSGeorge Karpenkov #include <string.h>
1210ab2aceSGeorge Karpenkov 
1302f3ad81SMatt Morehouse static char *argv0 = NULL;
1410ab2aceSGeorge Karpenkov 
LLVMFuzzerInitialize(int * argc,char *** argv)1510ab2aceSGeorge Karpenkov extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
1610ab2aceSGeorge Karpenkov   assert(*argc > 0);
1710ab2aceSGeorge Karpenkov   argv0 = **argv;
1810ab2aceSGeorge Karpenkov   fprintf(stderr, "LLVMFuzzerInitialize: %s\n", argv0);
1910ab2aceSGeorge Karpenkov   return 0;
2010ab2aceSGeorge Karpenkov }
2110ab2aceSGeorge Karpenkov 
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)2210ab2aceSGeorge Karpenkov extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
23d3e4b7e2SKostya Serebryany   assert(argv0);
2402f3ad81SMatt Morehouse   if (argv0 && Size >= 4 && !memcmp(Data, "fuzz", 4)) {
2510ab2aceSGeorge Karpenkov     fprintf(stderr, "BINGO %s\n", argv0);
2610ab2aceSGeorge Karpenkov     exit(1);
2710ab2aceSGeorge Karpenkov   }
2810ab2aceSGeorge Karpenkov   return 0;
2910ab2aceSGeorge Karpenkov }
30