[frameworks/kimageformats] autotests/ossfuzz: ossfuzz: optimize build, collect all HEIF subformats
Daniel Novomeský <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 65b4b14d6fa3c202e75f0822d883754c794b8715 by Daniel Novomeský.
Committed on 24/07/2026 at 14:02.
Pushed by novomeskyd into branch 'master'.
ossfuzz: optimize build, collect all HEIF subformats
Upgrade OpenEXR
M +52 -55 autotests/ossfuzz/build_fuzzers.sh
M +56 -1 autotests/ossfuzz/kimgio_fuzzer.cc
M +2 -2 autotests/ossfuzz/prepare_build.sh
https://invent.kde.org/frameworks/kimageformats/-/commit/65b4b14d6fa3c202e75f0822d883754c794b8715
diff --git a/autotests/ossfuzz/build_fuzzers.sh b/autotests/ossfuzz/build_fuzzers.sh
index f9c6019c..ccb333a9 100755
--- a/autotests/ossfuzz/build_fuzzers.sh
+++ b/autotests/ossfuzz/build_fuzzers.sh
@@ -26,8 +26,8 @@ export LDFLAGS
# build zstd
cd $SRC/zstd
-cmake -S build/cmake -DBUILD_SHARED_LIBS=OFF
-make install -j$(nproc)
+cmake -G Ninja -S build/cmake -DBUILD_SHARED_LIBS=OFF -DZSTD_BUILD_PROGRAMS=OFF -DBUILD_TESTING=OFF
+ninja install
# Build zlib
cd $SRC/zlib
@@ -70,13 +70,13 @@ cmake --install .
# Build extra-cmake-modules
cd $SRC/extra-cmake-modules
-cmake . -DBUILD_TESTING=OFF
-make install -j$(nproc)
+cmake -G Ninja . -DBUILD_TESTING=OFF -DBUILD_DOC=OFF
+ninja install
cd $SRC/karchive
rm -rf poqm
-cmake . -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=/usr/local
-make install -j$(nproc)
+cmake -G Ninja . -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=/usr/local
+ninja install
# Build JXRlib
cd $SRC/jxrlib
@@ -101,31 +101,28 @@ cd $SRC/aom
mkdir build.libavif
cd build.libavif
extra_libaom_flags='-DAOM_MAX_ALLOCABLE_MEMORY=536870912 -DDO_RANGE_CHECK_CLAMP=1'
-cmake -DBUILD_SHARED_LIBS=0 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCONFIG_PIC=1 -DAOM_TARGET_CPU=generic -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=12288 -DDECODE_WIDTH_LIMIT=12288 -DAOM_EXTRA_C_FLAGS="${extra_libaom_flags}" -DAOM_EXTRA_CXX_FLAGS="${extra_libaom_flags}" ..
-make -j$(nproc)
-make install -j$(nproc)
+cmake -G Ninja -DBUILD_SHARED_LIBS=0 -DENABLE_DOCS=0 -DENABLE_EXAMPLES=0 -DENABLE_TESTDATA=0 -DENABLE_TESTS=0 -DENABLE_TOOLS=0 -DCONFIG_PIC=1 -DAOM_TARGET_CPU=generic -DCONFIG_SIZE_LIMIT=1 -DDECODE_HEIGHT_LIMIT=12288 -DDECODE_WIDTH_LIMIT=12288 -DAOM_EXTRA_C_FLAGS="${extra_libaom_flags}" -DAOM_EXTRA_CXX_FLAGS="${extra_libaom_flags}" ..
+ninja install
# Build libavif
cd $SRC/libavif
ln -s "$SRC/aom" "$SRC/libavif/ext/"
mkdir build
cd build
-CFLAGS="$CFLAGS -fPIC" cmake -DBUILD_SHARED_LIBS=OFF -DAVIF_ENABLE_WERROR=OFF -DAVIF_CODEC_AOM=LOCAL -DAVIF_LIBYUV=OFF ..
-make -j$(nproc)
+CFLAGS="$CFLAGS -fPIC" cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DAVIF_ENABLE_WERROR=OFF -DAVIF_CODEC_AOM=LOCAL -DAVIF_LIBYUV=OFF ..
+ninja
# Build libde265
cd $SRC/libde265
-cmake -DBUILD_SHARED_LIBS=OFF -DENABLE_SDL=OFF -DENABLE_SIMD=OFF -DENABLE_AVX2=OFF -DENABLE_AVX512=OFF .
-make -j$(nproc)
-make install -j$(nproc)
+cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DENABLE_SDL=OFF -DENABLE_SIMD=OFF -DENABLE_AVX2=OFF -DENABLE_AVX512=OFF .
+ninja install
# Build openjpeg
cd $SRC/openjpeg
mkdir build
cd build
-cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_CODEC=OFF ..
-make -j$(nproc)
-make install -j$(nproc)
+cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON -DBUILD_CODEC=OFF ..
+ninja install
# build openh264
cd $SRC/openh264
@@ -135,17 +132,15 @@ make USE_ASM=No BUILDTYPE=Debug install-static -j$(nproc)
cd $SRC/openexr
mkdir _build
cd _build
-cmake -DBUILD_SHARED_LIBS=OFF ..
-make -j$(nproc)
-make install -j$(nproc)
+cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DOPENEXR_BUILD_TOOLS=OFF -DOPENEXR_INSTALL_TOOLS=OFF -DOPENEXR_BUILD_EXAMPLES=OFF -DOPENEXR_TEST_LIBRARIES=OFF -DOPENEXR_TEST_TOOLS=OFF -DOPENEXR_TEST_PYTHON=OFF ..
+ninja install
# Build libjxl
cd $SRC/libjxl
mkdir build
cd build
-CXXFLAGS="$CXXFLAGS -DHWY_COMPILE_ONLY_SCALAR" cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_DOXYGEN=OFF -DJPEGXL_ENABLE_EXAMPLES=OFF -DJPEGXL_ENABLE_JNI=OFF -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_ENABLE_OPENEXR=OFF -DJPEGXL_ENABLE_PLUGINS=OFF -DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_SKCMS=ON -DJPEGXL_ENABLE_TCMALLOC=OFF -DJPEGXL_ENABLE_TOOLS=OFF -DJPEGXL_ENABLE_FUZZERS=OFF ..
-make -j$(nproc) jxl jxl_cms jxl_threads
-make install -j$(nproc)
+CXXFLAGS="$CXXFLAGS -DHWY_COMPILE_ONLY_SCALAR" cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DJPEGXL_ENABLE_BENCHMARK=OFF -DJPEGXL_ENABLE_DOXYGEN=OFF -DJPEGXL_ENABLE_EXAMPLES=OFF -DJPEGXL_ENABLE_JNI=OFF -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_ENABLE_OPENEXR=OFF -DJPEGXL_ENABLE_PLUGINS=OFF -DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_SKCMS=ON -DJPEGXL_ENABLE_TCMALLOC=OFF -DJPEGXL_ENABLE_TOOLS=OFF -DJPEGXL_ENABLE_FUZZERS=OFF ..
+ninja install
# Build libheif
cd $SRC/libheif
@@ -154,49 +149,51 @@ sed -i "s/static const int MAX_IMAGE_WIDTH = 32768;/static const int MAX_IMAGE_W
sed -i "s/static const int MAX_IMAGE_HEIGHT = 32768;/static const int MAX_IMAGE_HEIGHT = 8192;/g" libheif/security_limits.h
mkdir build
cd build
-cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DENABLE_PLUGIN_LOADING=OFF -DWITH_EXAMPLES=OFF -DBUILD_DOCUMENTATION=OFF -DWITH_LIBSHARPYUV=OFF -DWITH_UNCOMPRESSED_CODEC=ON -DWITH_DAV1D=OFF -DWITH_EXAMPLES=OFF -DWITH_LIBDE265=ON -DWITH_RAV1E=OFF -DWITH_RAV1E_PLUGIN=OFF -DWITH_SvtEnc=OFF -DWITH_SvtEnc_PLUGIN=OFF -DWITH_X265=OFF -DWITH_X264=OFF -DWITH_OpenJPEG_DECODER=ON -DWITH_OpenH264_DECODER=ON ..
-make -j$(nproc)
-make install -j$(nproc)
+cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DENABLE_PLUGIN_LOADING=OFF -DWITH_EXAMPLES=OFF -DBUILD_DOCUMENTATION=OFF -DWITH_LIBSHARPYUV=OFF -DWITH_UNCOMPRESSED_CODEC=ON -DWITH_DAV1D=OFF -DWITH_EXAMPLES=OFF -DWITH_LIBDE265=ON -DWITH_RAV1E=OFF -DWITH_RAV1E_PLUGIN=OFF -DWITH_SvtEnc=OFF -DWITH_SvtEnc_PLUGIN=OFF -DWITH_X265=OFF -DWITH_X264=OFF -DWITH_OpenJPEG_DECODER=ON -DWITH_OpenH264_DECODER=ON ..
+ninja install
cd $SRC/kimageformats
-HANDLER_TYPES="ANIHandler ani
- QAVIFHandler avif
- QDDSHandler dds
- EXRHandler exr
- FFHandler ff
- HDRHandler hdr
- HEIFHandler heif
- IFFHandler iff
- JP2Handler jp2
- QJpegXLHandler jxl
- JXRHandler jxr
- KraHandler kra
- OraHandler ora
- PCXHandler pcx
- PFMHandler pfm
- SoftimagePICHandler pic
- PSDHandler psd
- PXRHandler pxr
- QOIHandler qoi
- RASHandler ras
- RAWHandler raw
- RGBHandler rgb
- ScitexHandler sct
- TIMHandler tim
- TGAHandler tga
- XCFHandler xcf"
-
-echo "$HANDLER_TYPES" | while read class format; do
+HANDLER_TYPES="ani
+ avif
+ dds
+ exr
+ ff
+ hdr
+ heif
+ iff
+ jp2
+ jxl
+ jxr
+ kra
+ ora
+ pcx
+ pfm
+ pic
+ psd
+ pxr
+ qoi
+ ras
+ raw
+ rgb
+ sct
+ tim
+ tga
+ xcf"
+
+echo "$HANDLER_TYPES" | while read format; do
(
fuzz_target_name=kimgio_${format}_fuzzer
/usr/libexec/moc $SRC/kimageformats/src/imageformats/$format.cpp -o $format.moc
header=`ls $SRC/kimageformats/src/imageformats/$format*.h`
/usr/libexec/moc $header -o moc_`basename $header .h`.cpp
[suppressed due to size limit]
[suppressed due to size limit]
# -lclang_rt.builtins in the previous line is a temporary workaround to avoid a linker error "undefined reference to __truncsfhf2". Investigate why this is needed here, but not anywhere else, and possibly remove it.
find . -name "*.${format}" | zip -q $OUT/${fuzz_target_name}_seed_corpus.zip -@
)
done
+
+# Manually add other supported extensions to HEIF seed corpus
+find . -type f \( -name "*.avci" -o -name "*.heic" -o -name "*.hej2" \) | zip -q $OUT/kimgio_heif_fuzzer_seed_corpus.zip -@
diff --git a/autotests/ossfuzz/kimgio_fuzzer.cc b/autotests/ossfuzz/kimgio_fuzzer.cc
index d0b033ad..a3833c1d 100644
--- a/autotests/ossfuzz/kimgio_fuzzer.cc
+++ b/autotests/ossfuzz/kimgio_fuzzer.cc
@@ -31,32 +31,87 @@
#include <QImage>
#include <QImageReader>
+#if defined KIMG_FUZZER_ani
#include "ani_p.h"
+#define HANDLER ANIHandler
+#elif defined KIMG_FUZZER_avif
#include "avif_p.h"
+#define HANDLER QAVIFHandler
+#elif defined KIMG_FUZZER_dds
#include "dds_p.h"
+#define HANDLER QDDSHandler
+#elif defined KIMG_FUZZER_exr
#include "exr_p.h"
+#define HANDLER EXRHandler
+#elif defined KIMG_FUZZER_ff
#include "ff_p.h"
+#define HANDLER FFHandler
+#elif defined KIMG_FUZZER_hdr
#include "hdr_p.h"
+#define HANDLER HDRHandler
+#elif defined KIMG_FUZZER_heif
#include "heif_p.h"
+#define HANDLER HEIFHandler
+#elif defined KIMG_FUZZER_iff
#include "iff_p.h"
+#define HANDLER IFFHandler
+#elif defined KIMG_FUZZER_jp2
#include "jp2_p.h"
+#define HANDLER JP2Handler
+#elif defined KIMG_FUZZER_jxl
#include "jxl_p.h"
+#define HANDLER QJpegXLHandler
+#elif defined KIMG_FUZZER_jxr
#include "jxr_p.h"
+#define HANDLER JXRHandler
+#elif defined KIMG_FUZZER_kra
#include "kra.h"
+#define HANDLER KraHandler
+#elif defined KIMG_FUZZER_ora
#include "ora.h"
+#define HANDLER OraHandler
+#elif defined KIMG_FUZZER_pcx
#include "pcx_p.h"
+#define HANDLER PCXHandler
+#elif defined KIMG_FUZZER_pfm
#include "pfm_p.h"
+#define HANDLER PFMHandler
+#elif defined KIMG_FUZZER_pic
#include "pic_p.h"
+#define HANDLER SoftimagePICHandler
+#elif defined KIMG_FUZZER_psd
#include "psd_p.h"
+#define HANDLER PSDHandler
+#elif defined KIMG_FUZZER_pxr
#include "pxr_p.h"
+#define HANDLER PXRHandler
+#elif defined KIMG_FUZZER_qoi
#include "qoi_p.h"
+#define HANDLER QOIHandler
+#elif defined KIMG_FUZZER_ras
#include "ras_p.h"
+#define HANDLER RASHandler
+#elif defined KIMG_FUZZER_raw
#include "raw_p.h"
+#define HANDLER RAWHandler
+#elif defined KIMG_FUZZER_rgb
#include "rgb_p.h"
+#define HANDLER RGBHandler
+#elif defined KIMG_FUZZER_sct
#include "sct_p.h"
+#define HANDLER ScitexHandler
+#elif defined KIMG_FUZZER_tim
#include "tim_p.h"
+#define HANDLER TIMHandler
+#elif defined KIMG_FUZZER_tga
#include "tga_p.h"
+#define HANDLER TGAHandler
+#elif defined KIMG_FUZZER_xcf
#include "xcf_p.h"
+#define HANDLER XCFHandler
+#else
+#error "KIMG_FUZZER_format not defined!"
+#endif
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
{
@@ -65,7 +120,7 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
QImageReader::setAllocationLimit(512);
- QImageIOHandler* handler = new HANDLER();
+ QImageIOHandler *handler = new HANDLER();
QImage i;
QBuffer b;
diff --git a/autotests/ossfuzz/prepare_build.sh b/autotests/ossfuzz/prepare_build.sh
index 966d56bd..b0bcdf51 100755
--- a/autotests/ossfuzz/prepare_build.sh
+++ b/autotests/ossfuzz/prepare_build.sh
@@ -27,8 +27,8 @@ apt-get update && \
git clone --depth 1 https://github.com/madler/zlib.git
git clone --depth 1 -b v1.5.7 https://github.com/facebook/zstd.git
wget https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz
-git clone https://github.com/tukaani-project/xz.git
-git clone --depth 1 --branch=RB-3.3 https://github.com/AcademySoftwareFoundation/openexr.git
+git clone --depth 1 https://github.com/tukaani-project/xz.git
+git clone --depth 1 --branch=RB-3.4 https://github.com/AcademySoftwareFoundation/openexr.git
git clone --depth 1 -b master https://invent.kde.org/frameworks/extra-cmake-modules.git
git clone --depth 1 --branch=dev git://code.qt.io/qt/qtbase.git
git clone --depth 1 --branch=dev git://code.qt.io/qt/qttools.git