diff options
author | tsdgeos <aacid@kde.org> | 2019-04-17 00:40:48 +0200 |
---|---|---|
committer | Max Moroz <dor3s1@gmail.com> | 2019-04-16 15:40:48 -0700 |
commit | 0221e8b0307c3f069e248082ef99ae2d6fa5a7cb (patch) | |
tree | f159857fee704ee30ccb81aacaaefe0108122649 /projects | |
parent | 53c09d30f60f4b65eaab9d622f3f47938aa7bd4a (diff) | |
download | oss-fuzz-0221e8b0307c3f069e248082ef99ae2d6fa5a7cb.tar.gz |
[kimageformats] Split fuzzer into 9 fuzzers (#2327)
oss-fuzz devels say this is optimal
Diffstat (limited to 'projects')
-rw-r--r-- | projects/kimageformats/build.sh | 22 | ||||
-rw-r--r-- | projects/kimageformats/kimgio_fuzzer.cc | 33 |
2 files changed, 31 insertions, 24 deletions
diff --git a/projects/kimageformats/build.sh b/projects/kimageformats/build.sh index d71bed0b7..e0b7f2088 100644 --- a/projects/kimageformats/build.sh +++ b/projects/kimageformats/build.sh @@ -32,6 +32,24 @@ cd karchive cmake . -DBUILD_SHARED_LIBS=OFF -DQt5Core_DIR=$SRC/qtbase/lib/cmake/Qt5Core/ -DBUILD_TESTING=OFF make install -j$(nproc) -$CXX $CXXFLAGS -fPIC -std=c++11 $SRC/kimgio_fuzzer.cc $SRC/kimageformats/src/imageformats/kra.cpp $SRC/kimageformats/src/imageformats/ora.cpp $SRC/kimageformats/src/imageformats/pcx.cpp $SRC/kimageformats/src/imageformats/pic.cpp $SRC/kimageformats/src/imageformats/psd.cpp $SRC/kimageformats/src/imageformats/ras.cpp $SRC/kimageformats/src/imageformats/rgb.cpp $SRC/kimageformats/src/imageformats/tga.cpp $SRC/kimageformats/src/imageformats/xcf.cpp -o $OUT/kimgio_fuzzer -I $SRC/qtbase/include/QtCore/ -I $SRC/qtbase/include/ -I $SRC/qtbase/include//QtGui -I $SRC/kimageformats/src/imageformats/ -I $SRC/karchive/src/ -I $SRC/qtbase/mkspecs/linux-clang-libc++/ -L $SRC/qtbase/lib -lQt5Gui -lQt5Core -lqtlibpng -lqtharfbuzz -lm -lqtpcre2 -ldl -lpthread -lFuzzingEngine /usr/local/lib/libzip.a /usr/local/lib/libz.a -lKF5Archive +cd $SRC +cd kimageformats +HANDLER_TYPES="KraHandler kra + OraHandler ora + PCXHandler pcx + SoftimagePICHandler pic + PSDHandler psd + RASHandler ras + RGBHandler rgb + TGAHandler tga + XCFHandler xcf" + +echo "$HANDLER_TYPES" | while read class format; do +( + fuzz_target_name=kimgio_${format}_fuzzer + + $CXX $CXXFLAGS -fPIC -DHANDLER=$class -std=c++11 $SRC/kimgio_fuzzer.cc $SRC/kimageformats/src/imageformats/$format.cpp -o $OUT/$fuzz_target_name -I $SRC/qtbase/include/QtCore/ -I $SRC/qtbase/include/ -I $SRC/qtbase/include//QtGui -I $SRC/kimageformats/src/imageformats/ -I $SRC/karchive/src/ -I $SRC/qtbase/mkspecs/linux-clang-libc++/ -L $SRC/qtbase/lib -lQt5Gui -lQt5Core -lqtlibpng -lqtharfbuzz -lm -lqtpcre2 -ldl -lpthread -lFuzzingEngine /usr/local/lib/libzip.a /usr/local/lib/libz.a -lKF5Archive -zip -qr $OUT/kimgio_fuzzer_seed_corpus.zip $SRC/kimageformats/autotests/read/ $SRC/kimageformats/autotests/write/ $SRC/kimageformats/autotests/pic/ + find . -name "*.${format}" | zip -q $OUT/${fuzz_target_name}_seed_corpus.zip -@ +) +done diff --git a/projects/kimageformats/kimgio_fuzzer.cc b/projects/kimageformats/kimgio_fuzzer.cc index ca74dc1a3..7a17076c8 100644 --- a/projects/kimageformats/kimgio_fuzzer.cc +++ b/projects/kimageformats/kimgio_fuzzer.cc @@ -20,7 +20,7 @@ Usage: python infra/helper.py build_image kimageformats python infra/helper.py build_fuzzers --sanitizer undefined|address|memory kimageformats - python infra/helper.py run_fuzzer kimageformats kimgio_fuzzer + python infra/helper.py run_fuzzer kimageformats kimgio_[kra|ora|pcx|pic|psd|ras|rgb|tga|xcf]_fuzzer */ @@ -43,28 +43,17 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) int argc = 0; QCoreApplication a(argc, nullptr); - const QVector<QImageIOHandler*> handlers = { - new KraHandler(), - new OraHandler(), - new PCXHandler(), - new SoftimagePICHandler(), - new PSDHandler(), - new RASHandler(), - new RGBHandler(), - new TGAHandler(), - new XCFHandler() - }; + QImageIOHandler* handler = new HANDLER(); - for (QImageIOHandler *h : handlers) { - QImage i; - QBuffer b; - b.setData((const char *)data, size); - b.open(QIODevice::ReadOnly); - h->setDevice(&b); - h->canRead(); - h->read(&i); - } - qDeleteAll(handlers); + QImage i; + QBuffer b; + b.setData((const char *)data, size); + b.open(QIODevice::ReadOnly); + handler->setDevice(&b); + handler->canRead(); + handler->read(&i); + + delete handler; return 0; } |