GraphicsMagick: Changes pertaining to file read/write file size ...

GraphicsMagick Commits <[email protected]> Sun, 21 Jan 2024 15:32:59 -0600
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.250.1705872796.1736.graphicsmagick-commit@lists.sourceforge.net>
changeset 60f313f3728a in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=60f313f3728a
summary: Changes pertaining to file read/write file size limits during normal and oss-fuzz testing.

diffstat:

 ChangeLog                              |  14 +++++
 VisualMagick/installer/inc/version.isx |   4 +-
 common.shi.in                          |  86 +++++++++++++++++++++++++++++++++-
 fuzzing/utils.cc                       |   1 +
 magick/blob.c                          |   7 ++-
 magick/version.h                       |   4 +-
 utilities/tests/common.sh              |   7 --
 utilities/tests/hald-clut.tap          |   4 +-
 www/Changelog.html                     |  13 +++++
 9 files changed, 124 insertions(+), 16 deletions(-)

diffs (240 lines):

diff -r 26fce892769e -r 60f313f3728a ChangeLog
--- a/ChangeLog	Sat Jan 20 10:00:07 2024 -0600
+++ b/ChangeLog	Sun Jan 21 15:32:55 2024 -0600
@@ -1,3 +1,17 @@
+2024-01-21  Bob Friesenhahn  <[email protected]>
+
+	* utilities/tests/common.sh, common.shi.in: Apply tight read and
+	write file size limits during testing.
+
+	* utilities/tests/hald-clut.tap (levels): Make messaging about
+	levels more distinct during Hald CLUT testing.
+
+	* fuzzing/utils.cc: Set a write resource limit during oss-fuzz
+	testing.
+
+	* magick/blob.c (ReadBlobByte): EOF detection requires reading
+	past the end of the file, so allow for that.
+
 2024-01-20  Bob Friesenhahn  <[email protected]>
 
 	* Copyright.txt, scripts/html_fragments.py, ChangeLog.2023: Rotate
diff -r 26fce892769e -r 60f313f3728a VisualMagick/installer/inc/version.isx
--- a/VisualMagick/installer/inc/version.isx	Sat Jan 20 10:00:07 2024 -0600
+++ b/VisualMagick/installer/inc/version.isx	Sun Jan 21 15:32:55 2024 -0600
@@ -10,5 +10,5 @@
 
 #define public MagickPackageName "GraphicsMagick"
 #define public MagickPackageVersion "1.4"
-#define public MagickPackageVersionAddendum ".020240120"
-#define public MagickPackageReleaseDate "snapshot-20240120"
+#define public MagickPackageVersionAddendum ".020240121"
+#define public MagickPackageReleaseDate "snapshot-20240121"
diff -r 26fce892769e -r 60f313f3728a common.shi.in
--- a/common.shi.in	Sat Jan 20 10:00:07 2024 -0600
+++ b/common.shi.in	Sun Jan 21 15:32:55 2024 -0600
@@ -6,6 +6,13 @@
 top_srcdir='@abs_top_srcdir@'
 top_builddir='@abs_top_builddir@'
 
+# Populate a set of shell variables with a variable per feature
+# This is used to implement a poor-man's hash map.
+for feature in ${MAGICK_FEATURES}
+do
+    eval MAGICK_FEATURE_${feature}=yes
+done
+
 set -a
 TOP_SRCDIR_NATIVE='@top_srcdir_native@'
 GM="${MEMCHECK} @abs_top_builddir@/utilities/gm"
@@ -20,6 +27,13 @@
 
 PATH="@abs_top_builddir@/utilities:${PATH}"
 
+MIFF_COMPRESS=none
+if [ "${MAGICK_FEATURE_BZLIB}" = "yes" ] ; then
+    MIFF_COMPRESS=bzip
+elif [ "${MAGICK_FEATURE_ZLIB}" = "yes" ] ; then
+    MIFF_COMPRESS=zip
+fi
+
 # Number of bits in a pixel Quantum (8/16/32)
 QuantumDepth=@QuantumDepth@
 
@@ -39,13 +53,81 @@
 if test -z "$MAGICK_LIMIT_DISK" ; then
     export MAGICK_LIMIT_DISK=0
 fi
+if test -z "$MAGICK_LIMIT_WRITE" ; then
+    # File write/read limits are based on checking output sizes of the
+    # largest files.  This means that tests may fail if these files
+    # become larger.  The two largest files are:
+    #
+    # utilities/tests/HaldClutIdentity_out.miff
+    # utilities/tests/montage_out.miff
+    printf "Evaluating MAGICK_LIMIT_WRITE, MIFF_COMPRESS=${MIFF_COMPRESS}\n"
+    case "${MIFF_COMPRESS}" in
+        none)
+            case ${QuantumDepth} in
+                8)
+                    MAGICK_LIMIT_WRITE=8.6MB
+                    ;;
+                16)
+                    MAGICK_LIMIT_WRITE=18MB
+                    ;;
+                32)
+                    MAGICK_LIMIT_WRITE=35MB
+                    ;;
+            esac
+        ;;
+        rle)
+            case ${QuantumDepth} in
+                8)
+                    MAGICK_LIMIT_WRITE=12MB
+                    ;;
+                16)
+                    MAGICK_LIMIT_WRITE=20MB
+                    ;;
+                32)
+                    MAGICK_LIMIT_WRITE=38MB
+                    ;;
+            esac
+            ;;
+        zip)
+            case ${QuantumDepth} in
+                8)
+                    MAGICK_LIMIT_WRITE=6.0MB
+                    ;;
+                16)
+                    MAGICK_LIMIT_WRITE=7.3MB
+                    ;;
+                32)
+                    MAGICK_LIMIT_WRITE=6.3MB
+                    ;;
+            esac
+            ;;
+        bzip)
+            case ${QuantumDepth} in
+                8)
+                    MAGICK_LIMIT_WRITE=3.2MB
+                    ;;
+                16)
+                    MAGICK_LIMIT_WRITE=4.6MB
+                    ;;
+                32)
+                    MAGICK_LIMIT_WRITE=5.6MB
+                    ;;
+            esac
+            ;;
+    esac
+    export MAGICK_LIMIT_WRITE
+    if test -z "$MAGICK_LIMIT_READ" ; then
+        export MAGICK_LIMIT_READ=$MAGICK_LIMIT_WRITE
+    fi
+fi
 #if test -z "$MAGICK_LIMIT_READ" ; then
-#    export MAGICK_LIMIT_READ=800000
+#    export MAGICK_LIMIT_READ=36MB
 #fi
+
 # Enable debug traces for exceptions
 if test -z "MAGICK_DEBUG" ; then
     export MAGICK_DEBUG=exception
 fi
-printf "Resource Limits: MAGICK_LIMIT_MEMORY=%s MAGICK_LIMIT_WIDTH=%s MAGICK_LIMIT_HEIGHT=%s MAGICK_LIMIT_DISK=%s\n\n" "$MAGICK_LIMIT_MEMORY" "$MAGICK_LIMIT_WIDTH" "$MAGICK_LIMIT_HEIGHT" "$MAGICK_LIMIT_DISK"
+printf "Resource Limits: MAGICK_LIMIT_MEMORY=%s MAGICK_LIMIT_WIDTH=%s MAGICK_LIMIT_HEIGHT=%s MAGICK_LIMIT_DISK=%s MAGICK_LIMIT_READ=%s MAGICK_LIMIT_WRITE=%s\n\n" "$MAGICK_LIMIT_MEMORY" "$MAGICK_LIMIT_WIDTH" "$MAGICK_LIMIT_HEIGHT" "$MAGICK_LIMIT_DISK" "$MAGICK_LIMIT_READ" "$MAGICK_LIMIT_WRITE"
 
 set +a
diff -r 26fce892769e -r 60f313f3728a fuzzing/utils.cc
--- a/fuzzing/utils.cc	Sat Jan 20 10:00:07 2024 -0600
+++ b/fuzzing/utils.cc	Sun Jan 21 15:32:55 2024 -0600
@@ -23,6 +23,7 @@
         MagickLib::SetMagickResourceLimit(MagickLib::HeightResource, 2048);
         MagickLib::SetMagickResourceLimit(MagickLib::DiskResource, 0);
         MagickLib::SetMagickResourceLimit(MagickLib::ReadResource, 900000);
+        MagickLib::SetMagickResourceLimit(MagickLib::WriteResource, 1118720);
     }
 };
 
diff -r 26fce892769e -r 60f313f3728a magick/blob.c
--- a/magick/blob.c	Sat Jan 20 10:00:07 2024 -0600
+++ b/magick/blob.c	Sun Jan 21 15:32:55 2024 -0600
@@ -3550,7 +3550,12 @@
 
   blob=image->blob;
 
-  if (blob->read_total >= blob->read_limit)
+  /*
+    EOF detection requires attempting to read beyond the file data so
+    use > rather than >=.  Otherwise there will be failure if the read
+    limit is the same as the file size.
+  */
+  if (blob->read_total > blob->read_limit)
     {
       blob->eof=1;
       ThrowException(&image->exception,ResourceLimitError,ReadLimitExceeded,
diff -r 26fce892769e -r 60f313f3728a magick/version.h
--- a/magick/version.h	Sat Jan 20 10:00:07 2024 -0600
+++ b/magick/version.h	Sun Jan 21 15:32:55 2024 -0600
@@ -38,8 +38,8 @@
 #define MagickLibVersion  0x272404
 #define MagickLibVersionText  "1.4"
 #define MagickLibVersionNumber 27,24,4
-#define MagickChangeDate   "20240120"
-#define MagickReleaseDate  "snapshot-20240120"
+#define MagickChangeDate   "20240121"
+#define MagickReleaseDate  "snapshot-20240121"
 
 /*
   The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines
diff -r 26fce892769e -r 60f313f3728a utilities/tests/common.sh
--- a/utilities/tests/common.sh	Sat Jan 20 10:00:07 2024 -0600
+++ b/utilities/tests/common.sh	Sun Jan 21 15:32:55 2024 -0600
@@ -14,10 +14,3 @@
 #CONVERT_FLAGS='-monitor'
 #COMPOSITE_FLAGS='-monitor'
 #MONTAGE_FLAGS='-monitor'
-
-MIFF_COMPRESS=none
-if [ "${MAGICK_FEATURE_BZLIB}" = "yes" ] ; then
-    MIFF_COMPRESS=bzip
-elif [ "${MAGICK_FEATURE_ZLIB}" = "yes" ] ; then
-    MIFF_COMPRESS=zip
-fi
diff -r 26fce892769e -r 60f313f3728a utilities/tests/hald-clut.tap
--- a/utilities/tests/hald-clut.tap	Sat Jan 20 10:00:07 2024 -0600
+++ b/utilities/tests/hald-clut.tap	Sun Jan 21 15:32:55 2024 -0600
@@ -17,8 +17,8 @@
   echo "Testing Hald CLUT identity level ${level} ..."
   identity_image=identity:${level}
   rm -f ${OUTFILE}
-  test_command_fn 'Hald CLUT identity' ${GM} convert ${CONVERT_FLAGS} ${identity_image} -hald-clut ${identity_image} -label Hald-Clut -compress ${MIFF_COMPRESS} ${OUTFILE}
-  test_command_fn 'Hald CLUT verify' ${GM} compare -maximum-error 1.5e-11 -metric MAE ${identity_image} -compress ${MIFF_COMPRESS} ${OUTFILE}
+  test_command_fn "Hald CLUT identity (level=${level})" ${GM} convert ${CONVERT_FLAGS} ${identity_image} -hald-clut ${identity_image} -label Hald-Clut -compress ${MIFF_COMPRESS} ${OUTFILE}
+  test_command_fn "Hald CLUT verify (level=${level})" ${GM} compare -maximum-error 1.5e-11 -metric MAE ${identity_image} -compress ${MIFF_COMPRESS} ${OUTFILE}
   echo
 done
 
diff -r 26fce892769e -r 60f313f3728a www/Changelog.html
--- a/www/Changelog.html	Sat Jan 20 10:00:07 2024 -0600
+++ b/www/Changelog.html	Sun Jan 21 15:32:55 2024 -0600
@@ -37,6 +37,19 @@
 </div>
 
 <div class="document">
+<p>2024-01-21  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>utilities/tests/common.sh, common.shi.in: Apply tight read and
+write file size limits during testing.</p></li>
+<li><p>utilities/tests/hald-clut.tap (levels): Make messaging about
+levels more distinct during Hald CLUT testing.</p></li>
+<li><p>fuzzing/utils.cc: Set a write resource limit during oss-fuzz
+testing.</p></li>
+<li><p>magick/blob.c (ReadBlobByte): EOF detection requires reading
+past the end of the file, so allow for that.</p></li>
+</ul>
+</blockquote>
 <p>2024-01-20  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">