GraphicsMagick: fuzzing: Add a coder_TIFF_any_fuzzer which auto-...

GraphicsMagick Commits <[email protected]> Sun, 02 Jun 2024 20:05:58 -0500
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.8536.1717376768.1586.graphicsmagick-commit@lists.sourceforge.net>
changeset 91892851c4c0 in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=91892851c4c0
summary: fuzzing: Add a coder_TIFF_any_fuzzer which auto-detects the input format but writes to TIFF.

diffstat:

 ChangeLog                              |   8 +++++++
 VisualMagick/installer/inc/version.isx |   4 +-
 fuzzing/coder_fuzzer.cc                |  37 ++++++++++++++++++---------------
 fuzzing/oss-fuzz-build.sh              |  17 +++++++++++++++
 magick/version.h                       |   4 +-
 www/ChangeLog.html                     |   9 ++++++++
 6 files changed, 58 insertions(+), 21 deletions(-)

diffs (156 lines):

diff -r 44c45e019392 -r 91892851c4c0 ChangeLog
--- a/ChangeLog	Sat Jun 01 16:00:21 2024 -0500
+++ b/ChangeLog	Sun Jun 02 20:05:30 2024 -0500
@@ -1,3 +1,11 @@
+2024-06-02  Bob Friesenhahn  <[email protected]>
+
+	* fuzzing/oss-fuzz-build.sh: Add a coder_TIFF_any_fuzzer which
+	auto-detects the input format but writes to TIFF.
+
+	* fuzzing/coder_fuzzer.cc (LLVMFuzzerTestOneInput): Update to be
+	able to disable forced read format.
+
 2024-06-01  Bob Friesenhahn  <[email protected]>
 
 	* fuzzing/oss-fuzz-build.sh: Assure that oss-fuzz provided CFLAGS
diff -r 44c45e019392 -r 91892851c4c0 VisualMagick/installer/inc/version.isx
--- a/VisualMagick/installer/inc/version.isx	Sat Jun 01 16:00:21 2024 -0500
+++ b/VisualMagick/installer/inc/version.isx	Sun Jun 02 20:05:30 2024 -0500
@@ -10,5 +10,5 @@
 
 #define public MagickPackageName "GraphicsMagick"
 #define public MagickPackageVersion "1.4"
-#define public MagickPackageVersionAddendum ".020240601"
-#define public MagickPackageReleaseDate "snapshot-20240601"
+#define public MagickPackageVersionAddendum ".020240602"
+#define public MagickPackageReleaseDate "snapshot-20240602"
diff -r 44c45e019392 -r 91892851c4c0 fuzzing/coder_fuzzer.cc
--- a/fuzzing/coder_fuzzer.cc	Sat Jun 01 16:00:21 2024 -0500
+++ b/fuzzing/coder_fuzzer.cc	Sun Jun 02 20:05:30 2024 -0500
@@ -11,25 +11,28 @@
 
 
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
-    Magick::Image image;
-    std::string coder = FUZZ_CODER;
-    image.magick(coder);
-    image.fileName(coder + ":");
-    // Add an arbitrary limit on JPEG scan lines
-    image.defineValue("JPEG", "max-scan-number", "50");
-    const Magick::Blob blob(data, size);
-    try {
-        image.read(blob);
-    } catch (Magick::Exception &e) {
-        return 0;
-    }
+  Magick::Image image;
+  std::string coder = FUZZ_CODER;
+#if !defined(FUZZ_GRAPHICSMAGICK_CODER_READANY)
+  image.magick(coder);
+  image.fileName(coder + ":");
+#endif
+  // Add an arbitrary limit on JPEG scan lines
+  image.defineValue("JPEG", "max-scan-number", "50");
+  const Magick::Blob blob(data, size);
+  try {
+    image.read(blob);
+  } catch (Magick::Exception &e) {
+    return 0;
+  }
 
 #if FUZZ_GRAPHICSMAGICK_CODER_WRITE
-    Magick::Blob outBlob;
-    try {
-        image.write(&outBlob, coder);
-    } catch (Magick::Exception &e) {}
+  Magick::Blob outBlob;
+  try {
+    image.magick(coder);
+    image.write(&outBlob, coder);
+  } catch (Magick::Exception &e) {}
 #endif
 
-    return 0;
+  return 0;
 }
diff -r 44c45e019392 -r 91892851c4c0 fuzzing/oss-fuzz-build.sh
--- a/fuzzing/oss-fuzz-build.sh	Sat Jun 01 16:00:21 2024 -0500
+++ b/fuzzing/oss-fuzz-build.sh	Sun Jun 02 20:05:30 2024 -0500
@@ -14,6 +14,7 @@
 # or maybe"
 #
 # ~/src/GM% docker cp fuzzing/oss-fuzz-build.sh $(docker ps -lq):/src/graphicsmagick/fuzzing/oss-fuzz-build.sh
+# ~/src/GM% docker cp fuzzing/coder_fuzzer.cc $(docker ps -lq):/src/graphicsmagick/fuzzing/
 #
 #
 # Useful environment variables:
@@ -620,6 +621,8 @@
 MAGICK_LIBS="$(pkg-config --static --libs-only-L GraphicsMagick++) $(pkg-config --static --libs-only-other GraphicsMagick++) $(pkg-config pkg-config --static --libs-only-l GraphicsMagick++)"
 printf "MAGICK_LIBS=${MAGICK_LIBS}\n"
 
+# FUZZ_GRAPHICSMAGICK_CODER_READANY
+
 printf "=== Building fuzzers...\n"
 for f in fuzzing/*_fuzzer.cc; do
     fuzzer=$(basename "$f" _fuzzer.cc)
@@ -651,6 +654,7 @@
         coder_flags="$coder_flags -DFUZZ_GRAPHICSMAGICK_CODER_WRITE=1"
     fi
 
+    # Build fuzzers which force the input format
     target="${OUT}/coder_${coder}_fuzzer"
     printf "=== Building ${target}...\n"
     set -x
@@ -659,6 +663,19 @@
         $coder_flags $LIB_FUZZING_ENGINE $MAGICK_LIBS
     set +x
 
+    # Additionally build fuzzers which auto-detect input for coders which write output
+    if [ "${coder}" == 'TIFF' ]; then
+        coder_flags="$coder_flags -DFUZZ_GRAPHICSMAGICK_CODER_WRITE=1 -DFUZZ_GRAPHICSMAGICK_CODER_READANY=1"
+        target="${OUT}/coder_${coder}_any_fuzzer"
+
+        printf "=== Building ${target}...\n"
+        set -x
+        $CXX $CXXFLAGS -std=c++11 -I"$WORK/include/GraphicsMagick" \
+             fuzzing/coder_fuzzer.cc -o "${target}" \
+             $coder_flags $LIB_FUZZING_ENGINE $MAGICK_LIBS
+        set +x
+    fi
+
     if [ -f "fuzzing/dictionaries/${coder}.dict" ]; then
         cp "fuzzing/dictionaries/${coder}.dict" "${OUT}/coder_${coder}_fuzzer.dict"
     fi
diff -r 44c45e019392 -r 91892851c4c0 magick/version.h
--- a/magick/version.h	Sat Jun 01 16:00:21 2024 -0500
+++ b/magick/version.h	Sun Jun 02 20:05:30 2024 -0500
@@ -38,8 +38,8 @@
 #define MagickLibVersion  0x282500
 #define MagickLibVersionText  "1.4"
 #define MagickLibVersionNumber 28,25,0
-#define MagickChangeDate   "20240601"
-#define MagickReleaseDate  "snapshot-20240601"
+#define MagickChangeDate   "20240602"
+#define MagickReleaseDate  "snapshot-20240602"
 
 /*
   The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines
diff -r 44c45e019392 -r 91892851c4c0 www/ChangeLog.html
--- a/www/ChangeLog.html	Sat Jun 01 16:00:21 2024 -0500
+++ b/www/ChangeLog.html	Sun Jun 02 20:05:30 2024 -0500
@@ -38,6 +38,15 @@
 
 <div class="document" id="graphicsmagick-changelog">
 <h1 class="title">GraphicsMagick ChangeLog</h1>
+<p>2024-06-02  Bob Friesenhahn  &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
+<blockquote>
+<ul class="simple">
+<li><p>fuzzing/oss-fuzz-build.sh: Add a coder_TIFF_any_fuzzer which
+auto-detects the input format but writes to TIFF.</p></li>
+<li><p>fuzzing/coder_fuzzer.cc (LLVMFuzzerTestOneInput): Update to be
+able to disable forced read format.</p></li>
+</ul>
+</blockquote>
 <p>2024-06-01  Bob Friesenhahn  &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
 <blockquote>
 <ul class="simple">