nimbus-eth2/nfuzz
Etan Kissling a6f0a7a55d
broaden `SszError` catches to `SerializationError` (#5081)
`nim-serialization` is tagged with `{.raises:[SerializationError].}` so
it is no longer sufficient to catch `SszError` in some situations.
`SszError` inherits from `SerializationError`, so broadening the caught
exception types can be done now, to enable bumping `nim-serialization`.

https://github.com/status-im/nimbus-eth2/pull/5043#issuecomment-1584227993

#5061 is also needed to bump `nim-serialization`.
2023-06-15 16:29:13 +00:00
..
README.md test fixture cleanups (#2976) 2021-10-12 13:36:52 +02:00
libnfuzz.h
libnfuzz.nim broaden `SszError` catches to `SerializationError` (#5081) 2023-06-15 16:29:13 +00:00

README.md

Introduction

libnfuzz is a wrapper library that exports to C, a set of fuzzing test cases written in Nim and making use of nimbus-eth2.

Building

To build the wrapper library (for more details follow first the instructions from nimbus-eth2):

git clone https://github.com/status-im/nimbus-eth2.git
cd nimbus-eth2
make
# static library
make libnfuzz.a
# dynamic loaded library
make libnfuzz.so

Default, the library is build with the minimal config. To select a specific config you can instead run:

# build with mainnet config
make libnfuzz.a NIMFLAGS="-d:const_preset=mainnet"

For the library to be useful for fuzzing with libFuzzer (e.g. for integration with beacon-fuzz) we can pass additional Nim arguments, e.g.:

make libnfuzz.a NIMFLAGS="--cc:clang --passC:'-fsanitize=fuzzer-no-link' --passL='-fsanitize=fuzzer'"

Other useful options might include: --clang.path:<path>, --clang.exe:<exe>, --clang.linkerexe:<exe>, -d:const_preset=mainnet

It might also deem useful to lower the log level, e.g. by adding -d:chronicles_log_level=fatal.

Usage

There is a libnfuzz.h file provided for easy including in C or C++ projects.

It is most important that before any of the exported tests are called, the NimMain() call is done first. Additionally, all following library calls need to be done from the same thread as from where the original NimMain() call was done.