blob: 8064c708cfc9b73432bd0ad802e8e4cd94e9dbf3 [file] [log] [blame]
Yann Collete21384f2017-08-31 12:11:57 -07001/*
Elliott Hughes44aba642023-09-12 20:18:59 +00002 * Copyright (c) Meta Platforms, Inc. and affiliates.
Nick Terrell4be7f0d2017-06-29 16:53:52 -07003 * All rights reserved.
4 *
Yann Collete21384f2017-08-31 12:11:57 -07005 * This source code is licensed under both the BSD-style license (found in the
6 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7 * in the COPYING file in the root directory of this source tree).
Nick Terrellac58c8d2020-03-26 15:19:05 -07008 * You may select, at your option, one of the above-listed licenses.
Nick Terrell4be7f0d2017-06-29 16:53:52 -07009 */
10
11/**
12 * Fuzz target interface.
13 * Fuzz targets have some common parameters passed as macros during compilation.
14 * Check the documentation for each individual fuzzer for more parameters.
15 *
Nick Terrell677c2cb2017-09-12 20:20:27 -070016 * @param STATEFUL_FUZZING:
Nick Terrell4be7f0d2017-06-29 16:53:52 -070017 * Define this to reuse state between fuzzer runs. This can be useful to
18 * test code paths which are only executed when contexts are reused.
19 * WARNING: Makes reproducing crashes much harder.
20 * Default: Not defined.
Yann Colletfa41bcc2018-06-13 14:59:26 -040021 * @param DEBUGLEVEL:
22 * This is a parameter for the zstd library. Defining `DEBUGLEVEL=1`
Nick Terrell4be7f0d2017-06-29 16:53:52 -070023 * enables assert() statements in the zstd library. Higher levels enable
Yann Colletfa41bcc2018-06-13 14:59:26 -040024 * logging, so aren't recommended. Defining `DEBUGLEVEL=1` is
Nick Terrell4be7f0d2017-06-29 16:53:52 -070025 * recommended.
26 * @param MEM_FORCE_MEMORY_ACCESS:
27 * This flag controls how the zstd library accesses unaligned memory.
28 * It can be undefined, or 0 through 2. If it is undefined, it selects
Elliott Hughes44aba642023-09-12 20:18:59 +000029 * the method to use based on the compiler.
Nick Terrell4be7f0d2017-06-29 16:53:52 -070030 * @param FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
31 * This is the canonical flag to enable deterministic builds for fuzzing.
32 * Changes to zstd for fuzzing are gated behind this define.
33 * It is recommended to define this when building zstd for fuzzing.
Elliott Hughes44aba642023-09-12 20:18:59 +000034 * @param FUZZ_THIRD_PARTY_SEQ_PROD
35 * This flag allows sequence producer plugin authors to replace the built-in
36 * default sequence producer with their own code. If you are not a plugin
37 * author, you should not define this flag. See the docs at
38 * fuzz_third_party_seq_prod.h for more information.
Nick Terrell4be7f0d2017-06-29 16:53:52 -070039 */
40
41#ifndef FUZZ_H
42#define FUZZ_H
43
Nick Terrell4be7f0d2017-06-29 16:53:52 -070044#include <stddef.h>
45#include <stdint.h>
46
Nick Terrell677c2cb2017-09-12 20:20:27 -070047#ifdef __cplusplus
48extern "C" {
49#endif
50
Nick Terrell4be7f0d2017-06-29 16:53:52 -070051int LLVMFuzzerTestOneInput(const uint8_t *src, size_t size);
52
Nick Terrell677c2cb2017-09-12 20:20:27 -070053#ifdef __cplusplus
54}
55#endif
56
Nick Terrell4be7f0d2017-06-29 16:53:52 -070057#endif