Jump to: navigation, search

Unit tests

Kdenlive's unit tests are built upon two excellent tools: FakeIt and Catch

To run the tests, you first need to build the project. It's preferable to build in debugging mode (see the building guide). Don't forget to add the flag -DBUILD_TESTING=ON to your CMake invocation.

Once the build is successful, you can simply run ./runTests from your build directory to execute them.


If you want to try fuzzing, you need to enable it when you build the project. Add -DBUILD_FUZZING=ON to your cmake command line (see the building guide).

First step: generate a corpus

We will build a corpus thanks to the unit tests. From your build directory run:

mkdir corpus
mv fuzz_case* corpus

Second step: Run

You will simply run the fuzzer continuously from your build dir, until you find a crash, if that ever happens:

./fuzzer/fuzz -detect_leaks=0 corpus

Third step: get the crash!

If you are (un)lucky, you may uncover a crash through the fuzzer. LibFuzzer will save the faulty input in the current directory, under a name like "crash-9127ecb8d6f30e400d35c47c45bf406eb605b9bb".

The first thing you need to do is to try to minimize the crash. LibFuzzer will attempt to find the minimal input that triggers the crash:

./fuzzer/fuzz  -detect_leaks=0 -exact_artifact_path=mycrash.txt -minimize_crash=1 crash-9127ecb8d6f30e400d35c47c45bf406eb605b9bb

This will run for a while, if you feel like it's not making any more progress, you can stop it whenever you want. It will store the resulting minimized crash in mycrash.txt

If your minimized mycrash.txt happens to be 0 bytes, check that your original crash file is not a false positive with

cat crash-9127ecb8d6f30e400d35c47c45bf406eb605b9bb |fuzzer/fuzz_reproduce

Congratulations! You have now found your first fuzzing bug in Kdenlive. Please report it here, don't forget to add the mycrash.txt that you found.

Continuous integration




This page was last modified on 15 April 2019, at 21:47. Content is available under Creative Commons License SA 4.0 unless otherwise noted.