diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2024-01-26 03:44:51 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2024-01-26 03:44:51 +0000 |
commit | 3cedc5fd080731a3cd2c47e2f40fc140bba1accb (patch) | |
tree | e0530823f7d1ae5e33f4aeb5b5a6e8f873a1ad68 /Build/source/libs/libpng/libpng-src/tests/pngtest-all | |
parent | c5b2b6fde7be60e4ef155aa1f6bef99621e26efc (diff) |
libpng 1.6.41
git-svn-id: svn://tug.org/texlive/trunk@69596 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/libpng/libpng-src/tests/pngtest-all')
-rw-r--r-- | Build/source/libs/libpng/libpng-src/tests/pngtest-all | 99 |
1 files changed, 88 insertions, 11 deletions
diff --git a/Build/source/libs/libpng/libpng-src/tests/pngtest-all b/Build/source/libs/libpng/libpng-src/tests/pngtest-all index 5e96451d373..7a9b64ae672 100644 --- a/Build/source/libs/libpng/libpng-src/tests/pngtest-all +++ b/Build/source/libs/libpng/libpng-src/tests/pngtest-all @@ -1,16 +1,93 @@ #!/bin/sh -# normal execution +st=0 # exit status (set to 1 if a test fails) +fail="**FAIL**" +success=" SUCCESS" +TEST(){ + # Try to make the log file easier to read: + test_status="$success" + echo "=============== PNGTEST $* ====================" + ./pngtest "$@" || { + st=$? + test_status="$fail" + } + echo "===============$test_status $* ====================" +} -./pngtest --strict ${srcdir}/pngtest.png +# The "standard" test +TEST --strict "${srcdir}"/pngtest.png -# various crashers -# using --relaxed because some come from fuzzers that don't maintain CRC's +# Various crashers +# Use --relaxed because some come from fuzzers that don't maintain CRCs +TEST --relaxed "${srcdir}"/contrib/testpngs/crashers/badcrc.png +# Use --xfail because there is no reliable way of disabling these errors +# (Adler32 checking cannot be switched off on all builds and there is no +# provision for turning the other checks into warnings.) +TEST --xfail "${srcdir}"/contrib/testpngs/crashers/badadler.png +TEST --xfail "${srcdir}"/contrib/testpngs/crashers/bad_iCCP.png +TEST --xfail "${srcdir}"/contrib/testpngs/crashers/empty_ancillary_chunks.png +for file in "${srcdir}"/contrib/testpngs/crashers/huge_*_chunk.png +do + TEST --xfail "$file" +done +for file in "${srcdir}"/contrib/testpngs/crashers/huge_*safe_to_copy.png +do + TEST --xfail "$file" +done +TEST --xfail "${srcdir}"/contrib/testpngs/crashers/huge_IDAT.png -./pngtest --relaxed ${srcdir}/contrib/testpngs/crashers/badcrc.png -./pngtest --relaxed ${srcdir}/contrib/testpngs/crashers/badadler.png -./pngtest --xfail ${srcdir}/contrib/testpngs/crashers/bad_iCCP.png -./pngtest --xfail ${srcdir}/contrib/testpngs/crashers/empty_ancillary_chunks.png -./pngtest --xfail ${srcdir}/contrib/testpngs/crashers/huge_*_chunk.png \ - ${srcdir}/contrib/testpngs/crashers/huge_*safe_to_copy.png -./pngtest --xfail ${srcdir}/contrib/testpngs/crashers/huge_IDAT.png +# Regression tests for required warnings (or errors): +check_stdout(){ + # $1: the test file (a bad PNG which must produce a warning, etc) + # $2: a string which must occur at the end of line on stdout for success + # result: an error message on descriptor 3 if the string is NOT found + # + # WARNING: when this script is executed on MSYS2 (Windows Cygwin variant) + # pngtest outputs lines terminated with <cr><lf> however the MSYS2 shell + # expects <lf> (\n) terminated lines so the <cr> ends up in the shell + # variable 'line' below. The pattern matching ignores this because of the + # '*' at the end of the pattern match. + found= + while read line + do + case "$line" in + *"$2"*) found=1;; + esac + echo "$line" # preserve the original output verbatim + done + # output the missing warning on descriptor 3: + test -z "$found" && echo "$1: $2" >&3 +} +# NOTE: traditionally the Bourne shell executed the last element in a pipe +# sequence in the original shell so it could set variables in the original +# shell however this is not reliable and doesn't work in bash. +# +# It *is* reliable to use the actual exit status of the last command in +# the pipeline. +exec 4>&1 # original stdout - the log file +{ + exec 3>&1 # stdout is the pipe at this point + fail=" FAIL(EXPECTED)" # runtime scope + success=" SUCCESS(UNEXPECTED)" # there should be a write error + for file in "${srcdir}"/contrib/testpngs/badpal/*.png + do + # The exit code is ignored here, the test is that the particular errors + # (warnings) are produced. The original output still ends up in the log + # file. + TEST "$file" | + check_stdout "$file" 'IDAT: Read palette index exceeding num_palette' | + check_stdout "$file" 'Wrote palette index exceeding num_palette' >&4 + done + exec 3>&- +} | { + # This may not be a sub-shell, if it is 'st' is undefined and the exit + # just ends up as 'exit'. + while read error + do + echo "MISSING REPORT: $error" + st=1 + done + exit $st +} || st=$? + +exit $st |