qt5base-lts/tests/libfuzzer
Qt Forward Merge Bot 8823bb8d30 Merge remote-tracking branch 'origin/5.15' into dev
Conflicts:
	examples/opengl/doc/src/cube.qdoc
	src/corelib/global/qlibraryinfo.cpp
	src/corelib/text/qbytearray_p.h
	src/corelib/text/qlocale_data_p.h
	src/corelib/time/qhijricalendar_data_p.h
	src/corelib/time/qjalalicalendar_data_p.h
	src/corelib/time/qromancalendar_data_p.h
	src/network/ssl/qsslcertificate.h
	src/widgets/doc/src/graphicsview.qdoc
	src/widgets/widgets/qcombobox.cpp
	src/widgets/widgets/qcombobox.h
	tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp
	tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
	tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro
	tests/manual/diaglib/debugproxystyle.cpp
	tests/manual/diaglib/qwidgetdump.cpp
	tests/manual/diaglib/qwindowdump.cpp
	tests/manual/diaglib/textdump.cpp
	util/locale_database/cldr2qlocalexml.py
	util/locale_database/qlocalexml.py
	util/locale_database/qlocalexml2cpp.py

Resolution of util/locale_database/ are based on:
https://codereview.qt-project.org/c/qt/qtbase/+/294250
and src/corelib/{text,time}/*_data_p.h were then regenerated by
running those scripts.

Updated CMakeLists.txt in each of
	tests/auto/corelib/serialization/qcborstreamreader/
	tests/auto/corelib/serialization/qcborvalue/
	tests/auto/gui/kernel/
and generated new ones in each of
	tests/auto/gui/kernel/qaddpostroutine/
	tests/auto/gui/kernel/qhighdpiscaling/
	tests/libfuzzer/corelib/text/qregularexpression/optimize/
	tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/
	tests/libfuzzer/gui/text/qtextdocument/sethtml/
	tests/libfuzzer/gui/text/qtextdocument/setmarkdown/
	tests/libfuzzer/gui/text/qtextlayout/beginlayout/
by running util/cmake/pro2cmake.py on their changed .pro files.

Changed target name in
	tests/auto/gui/kernel/qaction/qaction.pro
	tests/auto/gui/kernel/qaction/qactiongroup.pro
	tests/auto/gui/kernel/qshortcut/qshortcut.pro
to ensure unique target names for CMake

Changed tst_QComboBox::currentIndex to not test the
currentIndexChanged(QString), as that one does not exist in Qt 6
anymore.

Change-Id: I9a85705484855ae1dc874a81f49d27a50b0dcff7
2020-04-08 20:11:39 +02:00
..
corelib Merge remote-tracking branch 'origin/5.15' into dev 2020-04-08 20:11:39 +02:00
gui Merge remote-tracking branch 'origin/5.15' into dev 2020-04-08 20:11:39 +02:00
network/ssl/qsslcertificate/qsslcertificate/pem Fuzzing: Add fuzz target for ctor of QSslCertificate 2020-03-13 14:51:02 +01:00
README Merge remote-tracking branch 'origin/5.14' into 5.15 2019-11-23 01:00:23 +01:00

This directory contains tests to be run with clang's libFuzzer. It will generate data, pass this
data to the function

 LLVMFuzzerTestOneInput(const char *Data, size_t Size)

of the test and track the code execution. Should the test crash, libFuzzer will provide you with the
data which triggered the crash. You can then use this to debug and fix the called code.

! Please note: The purpose of fuzz testing is to find unexpected code paths. Running fuzz tests may!
! result in unforeseen behavior, including loss of data. Consider running the tests in an isolated !
! environment, e.g. on a virtual machine. You have been warned.                                    !

To run a test with libFuzzer:

1. Install clang 5.0 or later, e.g. from the repositories of the Linux distribution you are using.
   Depending on the version of clang and the source you are installing from, you might have to
   install libFuzzer for this version of clang explicitly.
2. Make sure clang and clang++ from this version of clang are found in PATH.
3. Configure Qt with
    -platform linux-clang -sanitize fuzzer-no-link
   or, if you are using clang 5
    -platform linux-clang -coverage trace-pc-guard
   to add the needed code coverage instrumentation. Since speed of execution is crucial for fuzz
   testing, it's recommendable to also use the switches
    -release -static
   It might also make sense to add sanitizers by passing
    -sanitize <...>
4. Build Qt.
5. Build one of the tests using this Qt build.
6. Execute the resulting executable.
   Depending on the expected input format of the tested function, you will get results faster if
   you:
    * provide a set of interesting input data by passing the path of a directory which contains
      these data, each in one file. You can find such data sets in the subdirectory
      "fuzzing/testcases" of the qtqa repository.
    * pass a so-called dictionary listing keywords of the input format using
       -dict=<dictionary file>
      A couple of such dictionaries are provided by AFL (http://lcamtuf.coredump.cx/afl/)
    * tell libFuzzer to generate only ASCII data using
       -only_ascii=1

For further info, see https://llvm.org/docs/LibFuzzer.html