[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.