cifuzz
makes fuzz tests as easy as unit tests
Docs | Glossary | Examples | Website | Blog | Twitter | YouTube
IMPORTANT: This project is under active development. Be aware that the behavior of the commands or the configuration can change.
What is cifuzz
cifuzz is a CLI tool that helps you to integrate and run fuzzing based tests into your project.
Features
- Easily set up, create and run fuzz tests
- Generate coverage reports that can be integrated in your IDE
- (Experimental) support for portable fuzz containers
- Supports multiple programming languages and build systems
Getting started
All you need to get started with fuzzing are these three simple commands:
$ cifuzz init # initialize your project
$ cifuzz create # create a simple fuzz test to start from
$ cifuzz run myfuzztest # run the fuzz testIf you are new to the world of fuzzing, we recommend you to take a look at our Glossary and our example projects.
Read the getting started guide if you just want to learn how to fuzz your applications with cifuzz.
Installation
You can get the latest release from GitHub or by running our install script:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/CodeIntelligenceTesting/cifuzz/main/install.sh)"If you are using Windows you can download the latest release and execute it.
Do not forget to add the installation's bin directory to your PATH.
You can find additional information in our Installation Guide.
Prerequisites
Depending on your language / build system of choice cifuzz has different prerequisites:
C/C++ with CMake
Ubuntu / Debian
sudo apt install cmake clang llvm lcovArch
sudo pacman -S cmake clang llvm lcovmacOS
brew install cmake llvm lcovWindows
At least Visual Studio 2022 version 17 is required.
Please make sure to
- select "Develop Desktop C++ applications" in the Visual Studio Installer
- check "C++ Clang Compiler for Windows" in the "Individual Components" tab
- check "C++ CMake Tools for Windows" in the "Individual Components" tab
- check "MSBuild support for LLVM (clang-cl) toolset" in the "Individual Components" tab
You can add these components anytime by choosing "Modify" in the Visual Studio Installer.
choco install lcovYou may have to add %ChocolateyInstall%\lib\lcov\tools\bin to your PATH variable.
C/C++ with Bazel
- Bazel >= 5.3.2 (>=6.0.0 on macOS)
- Java JDK >= 8 (1.8) (e.g. OpenJDK or Zulu) is needed for Bazel's coverage feature.
- LLVM >= 12
- lcov
Ubuntu / Debian
sudo apt install clang llvm lcov default-jdk zip
# install bazelisk
sudo curl -L https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64 -o /usr/local/bin/bazel
sudo chmod +x /usr/local/bin/bazelArch
sudo pacman -S clang llvm lcov python jdk-openjdk zip
# install bazelisk
sudo curl -L https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64 -o /usr/local/bin/bazel
sudo chmod +x /usr/local/bin/bazelmacOS Bazel C/C++ projects are currently not supported on macOS.
Windows Bazel C/C++ projects are currently not supported on Windows.
Java with Maven
Ubuntu / Debian
sudo apt install default-jdk mavenArch
sudo pacman -S jdk-openjdk mavenmacOS
brew install openjdk mavenWindows
choco install microsoft-openjdk mavenJava with Gradle
Ubuntu / Debian
sudo apt install default-jdk gradleArch
sudo pacman -S jdk-openjdk gradlemacOS
brew install openjdk gradleWindows
choco install microsoft-openjdk gradleAndroid
Info: Currently cifuzz is not supporting fuzz tests running in an emulator or on a device, it is still possible to run local tests. You can find more information and an example at the cifuzz-gradle-plugin repository.
- Gradle >= 7.5
- Android Gradle Plugin >= 7.4.2
Node.js
- Node.js >= 16.0
Ubuntu / Debian
sudo apt install nodejsArch
sudo pacman -S nodejsmacOS
brew install nodejsWindows
choco install nodejsWindows
In order to get font colors and glyphs to render properly install the
Windows Terminal from the Microsoft Store.
Run cifuzz in Developer PowerShell for VS 2022 inside of Windows Terminal.
Limitations
Windows
- C/C++ projects are only supported with CMake and fuzz tests cannot depend on shared libraries.
- Continuous code coverage is not supported for C/C++ projects.
Troubleshooting
If you encounter problems installing or running cifuzz, you can check Troubleshooting for possible solutions.
Contributing
Want to help improve cifuzz? Check out our contributing documentation. There you will find instructions for building the tool locally.
If you find an issue, please report it to cifuzz@code-intelligence.com.













