eba9ec0dd7
* quick proposal warn on startup if untrusted operations might run use vips_block_untrusted_set() to block untrusted operations, set an env var or make a file to stop the warning * mark fits, nifti and svg as untrusted * remove the annoying "untrusted" warning message better to warn on the download page leave vips_block_untrusted_set() since it's obviously useful * separate UNTRUSTED and BLOCKED * typos * add VIPS_BLOCK_UNTRUSTED env var * move BLOCK_UNTRUSTED after plugin load obviously, ooops * add a test, disable *magick although *magick is fuzzed, it's probably safer to disable it in untrusted environments * mark some more operations as untrusted
223 lines
4.8 KiB
Bash
Executable File
223 lines
4.8 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# this has now been mostly superseded by test_foreign.py ... keep this around
|
|
# as a test of the command-line interface
|
|
|
|
# set -x
|
|
set -e
|
|
|
|
. ./variables.sh
|
|
|
|
# poppler / pdfload reference image
|
|
poppler=$test_images/blankpage.pdf
|
|
poppler_ref=$test_images/blankpage.pdf.png
|
|
|
|
# giflib / gifload reference image
|
|
giflib=$test_images/trans-x.gif
|
|
giflib_ref=$test_images/trans-x.png
|
|
|
|
# the matlab image and reference image
|
|
matlab=$test_images/sample.mat
|
|
matlab_ref=$test_images/sample.png
|
|
|
|
# make a mono image
|
|
$vips extract_band $image $tmp/mono.v 1
|
|
mono=$tmp/mono.v
|
|
|
|
# make a radiance image
|
|
$vips float2rad $image $tmp/rad.v
|
|
rad=$tmp/rad.v
|
|
|
|
# make a cmyk image
|
|
$vips bandjoin "$image $tmp/mono.v" $tmp/t1.v
|
|
$vips copy $tmp/t1.v $tmp/cmyk.v --interpretation cmyk
|
|
cmyk=$tmp/cmyk.v
|
|
|
|
# save to t1.format, load as back.v
|
|
save_load() {
|
|
in=$1
|
|
format=$2
|
|
mode=$3
|
|
|
|
if ! $vips copy $in $tmp/t1.$format$mode ; then
|
|
echo "write to $out failed"
|
|
exit 1
|
|
fi
|
|
|
|
if ! $vips copy $tmp/t1.$format $tmp/back.v ; then
|
|
echo "read from $tmp/t1.format failed"
|
|
echo " (was written by $vips copy $in $tmp/t1.$format$mode)"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# save to the named file in tmp, convert back to vips again, subtract, look
|
|
# for max difference less than a threshold
|
|
test_format() {
|
|
in=$1
|
|
format=$2
|
|
threshold=$3
|
|
mode=$4
|
|
|
|
printf "testing $(basename $in) $format$mode ... "
|
|
|
|
save_load $in $format $mode
|
|
test_difference $in $tmp/back.v $threshold
|
|
|
|
echo "ok"
|
|
}
|
|
|
|
# as above, but hdr format
|
|
# this is a coded format, so we need to rad2float before we can test for
|
|
# differences
|
|
test_rad() {
|
|
in=$1
|
|
|
|
printf "testing $(basename $in) hdr ... "
|
|
|
|
save_load $in hdr
|
|
|
|
$vips rad2float $in $tmp/before.v
|
|
$vips rad2float $tmp/back.v $tmp/after.v
|
|
|
|
test_difference $tmp/before.v $tmp/after.v 0
|
|
|
|
echo "ok"
|
|
}
|
|
|
|
# as above, but raw format
|
|
# we can't use suffix stuff to pick the load/save
|
|
test_raw() {
|
|
in=$1
|
|
|
|
printf "testing $(basename $in) raw ... "
|
|
|
|
$vips copy $in $tmp/before.v
|
|
width=$($vipsheader -f width $tmp/before.v)
|
|
height=$($vipsheader -f height $tmp/before.v)
|
|
bands=$($vipsheader -f bands $tmp/before.v)
|
|
|
|
$vips rawsave $tmp/before.v $tmp/raw
|
|
$vips rawload $tmp/raw $tmp/after.v $width $height $bands
|
|
|
|
test_difference $tmp/before.v $tmp/after.v 0
|
|
|
|
echo "ok"
|
|
}
|
|
|
|
# a format for which we only have a load (eg. matlab)
|
|
# pass in a reference file as well and compare to that
|
|
test_loader() {
|
|
ref=$1
|
|
in=$2
|
|
format=$3
|
|
thresh=$4
|
|
|
|
printf "testing $(basename $in) $format ... "
|
|
|
|
$vips copy $ref $tmp/before.v
|
|
$vips copy $in $tmp/after.v
|
|
|
|
test_difference $tmp/before.v $tmp/after.v $thresh
|
|
|
|
echo "ok"
|
|
}
|
|
|
|
# a format for which we only have a saver (eg. dzsave)
|
|
# just run the operation and check exit status
|
|
test_saver() {
|
|
oper=$1
|
|
in=$2
|
|
suffix=$3
|
|
|
|
printf "testing $oper $(basename $in) $suffix ... "
|
|
|
|
rm -rf $tmp/savertest*
|
|
cmd="$vips $oper $in $tmp/savertest$suffix"
|
|
if ! $cmd ; then
|
|
echo "error executing:"
|
|
echo " $cmd"
|
|
exit 1
|
|
fi
|
|
|
|
echo "ok"
|
|
}
|
|
|
|
test_format $image v 0
|
|
if test_supported tiffload; then
|
|
test_format $image tif 0
|
|
test_format $image tif 90 [compression=jpeg]
|
|
test_format $image tif 0 [compression=deflate]
|
|
test_format $image tif 0 [compression=packbits]
|
|
test_format $image tif 90 [compression=jpeg,tile]
|
|
test_format $image tif 90 [compression=jpeg,tile,pyramid]
|
|
fi
|
|
if test_supported pngload; then
|
|
test_format $image png 0
|
|
test_format $image png 0 [compression=9,interlace=1]
|
|
test_format $image png 90 [palette,colours=256,Q=100,dither=0,interlace=1]
|
|
fi
|
|
if test_supported jpegload; then
|
|
test_format $image jpg 90
|
|
fi
|
|
if test_supported webpload; then
|
|
test_format $image webp 90
|
|
fi
|
|
test_format $image ppm 0
|
|
test_format $image pfm 0
|
|
if test_supported fitsload; then
|
|
test_format $image fits 0
|
|
fi
|
|
|
|
# csv can only do mono
|
|
test_format $mono csv 0
|
|
|
|
# cmyk jpg is a special path
|
|
if test_supported jpegload; then
|
|
test_format $cmyk jpg 90
|
|
fi
|
|
if test_supported tiffload; then
|
|
test_format $cmyk tif 0
|
|
test_format $cmyk tif 90 [compression=jpeg]
|
|
test_format $cmyk tif 90 [compression=jpeg,tile]
|
|
test_format $cmyk tif 90 [compression=jpeg,tile,pyramid]
|
|
fi
|
|
|
|
test_rad $rad
|
|
|
|
test_raw $mono
|
|
test_raw $image
|
|
|
|
if test_supported pdfload; then
|
|
test_loader $poppler_ref $poppler pdfload 0
|
|
fi
|
|
|
|
# don't test SVG --- the output varies too much between librsvg versions
|
|
|
|
if test_supported gifload; then
|
|
test_loader $giflib_ref $giflib gifload 0
|
|
fi
|
|
|
|
if test_supported matload; then
|
|
test_loader $matlab_ref $matlab matlab 0
|
|
fi
|
|
|
|
if test_supported dzsave; then
|
|
test_saver dzsave $image .zip
|
|
test_saver copy $image .dz
|
|
test_saver copy $image .dz[container=zip]
|
|
fi
|
|
|
|
# test blocked and untrusted
|
|
if test_supported magicksave; then
|
|
printf "testing VIPS_BLOCK_UNTRUSTED with imagemagick ... "
|
|
export VIPS_BLOCK_UNTRUSTED=1
|
|
if vips magicksave $matlab $tmp/block.png; then
|
|
echo "failed to block imagemagick"
|
|
exit 1
|
|
fi
|
|
echo "ok"
|
|
unset VIPS_BLOCK_UNTRUSTED
|
|
fi
|
|
|