new file mode 100644
@@ -0,0 +1,128 @@
+#!/bin/sh
+#
+# ImageMagick ptest:
+# We ceate an BASERGB file for our usage using "convert"
+# We convert this RGB file to BASEPNG
+# Using BASEPNG we recreate RGB named REGENERATEDRGB
+#
+# BASERGB to BASEPNG to REGENERATEDRGB
+# - Then compare BASERGB with REGENERATEDRGB
+#
+# 1) We are checking if the binaries are present in RFS or not
+# 2) We Created an RBG of size : WIDTH x HEIGHT pixels
+# 3) Return value is captured after every major actio to capture the status
+# 4) cmp -s is used to compare binary byte by byte data and
+# capture only exit status
+# 5) Important parametsrs used are :
+# -depth : How many bits for each colour pixel
+# -alpha off : Don't consider transparency
+# -define png:color-type=2 : Make PNG work with truecolour RGB
+# -strip : Remove all non-pixel metadata og PNG
+# so file is reproducible
+# -set gamma 1.0 : No PNG brightness correction
+# gradient:red-blue : Data moves liberly from RED to Blue vertically
+
+
+WIDTH=16
+HEIGHT=16
+BASERGB=base.rgb
+BASEPNG=base.png
+REGENERATEDRGB=roundtrip.rgb
+
+echo "[DEBUG] Starting ImageMagick Ptest with ${WIDTH}x${HEIGHT} pixels "
+
+# Verify required binaries
+for bin in convert cmp wc rm; do
+ if [ -z "$(command -v "$bin" 2>/dev/null)" ]; then
+ echo "[ERROR] Required binary '$bin' not found $PATH"
+ exit 127
+ fi
+done
+
+# Generate raw RGB
+convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
+ -alpha off -define png:color-type=2 \
+ -strip -set gamma 1.0 \
+ gradient:red-blue rgb:${BASERGB}
+
+returnvalue=$?
+if [ "$returnvalue" -ne 0 ]; then
+ echo "[FAIL] Failed to generate RGB pattern "
+ exit 1
+else
+ echo "[DEBUG] Generated raw RGB ${BASERGB} for test case"
+fi
+
+
+
+# Convert raw RGB to PNG
+convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
+ -alpha off -define png:color-type=2 \
+ -strip -set gamma 1.0 \
+ rgb:${BASERGB} ${BASEPNG}
+
+returnvalue=$?
+if [ $returnvalue -ne 0 ]; then
+ echo "[FAIL] Failed to convert RGB to PNG"
+ rm -f ${BASERGB}
+ exit 1
+else
+ echo "[DEBUG] ${BASEPNG} generated from ${BASERGB}"
+fi
+
+
+
+# Regenerate raw RGB from PNG
+convert -size ${WIDTH}x${HEIGHT} -depth 8 -type TrueColor \
+ -alpha off -define png:color-type=2 \
+ -strip -set gamma 1.0 \
+ ${BASEPNG} rgb:${REGENERATEDRGB}
+
+returnvalue=$?
+if [ $returnvalue -ne 0 ]; then
+ echo "[FAIL] Failed to re generate RGB from PNG "
+ rm -f ${BASERGB} ${BASEPNG}
+ exit 1
+else
+ echo "[DEBUG] ${REGENERATEDRGB} generated from ${BASEPNG}"
+fi
+
+
+
+# Compare original and recreated RGB
+if cmp -s ${BASERGB} ${REGENERATEDRGB}; then
+ echo "[PASS] RGB data identical after PNG round-trip"
+ RESULT=0
+else
+ echo "[FAIL] RGB mismatch detected, printing their size "
+ echo "[INFO] Base RGB size: $(wc -c < ${BASERGB}) bytes"
+ echo "[INFO] Round-trip RGB size: $(wc -c < ${REGENERATEDRGB}) bytes"
+ RESULT=1
+fi
+
+
+
+# Checking the identify tool from imagemagick to get the PNG metadata
+# True is added in end to ensure that test script doesnt fail even if
+# identify fails for any reason
+echo "[DEBUG] PNG file info:"
+identify -verbose ${BASEPNG} | grep -E "Depth|Type|Colorspace" || true
+
+
+
+# Cleanup of files create by test code
+echo "[DEBUG] Cleaning up temporary files"
+rm -f ${BASERGB} ${BASEPNG} ${REGENERATEDRGB}
+returnvalue=$?
+echo "[DEBUG] Cleanup exit=$returnvalue"
+
+
+# Logging the final result
+if [ ${RESULT} -eq 0 ]; then
+ echo "[DEBUG]: imagemagick-ptest.sh sucessfull "
+else
+ echo "[DEBUG]: imagemagick-ptest.sh failed "
+fi
+
+
+exit ${RESULT}
new file mode 100644
@@ -0,0 +1,43 @@
+#!/bin/sh
+#
+# run-ptest — ImageMagick ptest harness
+# POSIX-safe and BusyBox compatible
+
+PTDIR=$(dirname "$0")
+TESTDIR="$PTDIR"
+PASSCOUNT=0
+FAILCOUNT=0
+TOTAL=0
+
+echo "======================================="
+echo "ImageMagick ptest: Runtime Validation"
+echo "======================================="
+
+for t in "$TESTDIR"/*.sh; do
+ [ -x "$t" ] || chmod +x "$t"
+ TOTAL=$((TOTAL + 1))
+ echo
+ echo "[DEBUG] Launching test script $t"
+
+ if sh "$t" 2>&1; then
+ echo "PASS: $(basename "$t")"
+ PASSCOUNT=$((PASSCOUNT + 1))
+ else
+ rc=$?
+ if [ "$rc" -eq 77 ]; then
+ echo "SKIP: $(basename "$t")"
+ else
+ echo "FAIL: $(basename "$t")"
+ FAILCOUNT=$((FAILCOUNT + 1))
+ fi
+ fi
+
+done
+
+echo
+echo "======================================="
+echo "[SUMMARY] Total: $TOTAL | PASS: $PASSCOUNT | FAIL: $FAILCOUNT"
+echo "======================================="
+echo
+[ "$FAILCOUNT" -eq 0 ]
+
@@ -12,6 +12,8 @@ DEPENDS = "lcms bzip2 jpeg libpng tiff zlib fftw freetype libtool"
BASE_PV := "${PV}"
PV .= "-62"
SRC_URI = "git://github.com/ImageMagick/ImageMagick.git;branch=main;protocol=https \
+ file://run-ptest \
+ file://imagemagick-ptest.sh \
file://CVE-2021-20309.patch \
file://CVE-2021-20310.patch \
file://CVE-2021-3610.patch \
@@ -39,7 +41,11 @@ CVE_CHECK_IGNORE += "CVE-2016-7538"
# current version is not affected by the CVE which affects versions at least earlier than 7.0.4-4
CVE_CHECK_IGNORE += "CVE-2017-5506"
-inherit autotools pkgconfig update-alternatives
+inherit autotools pkgconfig update-alternatives ptest
+
+do_install_ptest() {
+ install -m 0755 ${WORKDIR}/imagemagick-ptest.sh ${D}${PTEST_PATH}/
+}
# xml disabled because it's using xml2-config --prefix to determine prefix which returns just /usr with our libxml2
# if someone needs xml support then fix it first