diff --git a/tests/fuzzer/CMakeLists.txt b/tests/fuzzer/CMakeLists.txt index 10bacb1c..dde8fc08 100644 --- a/tests/fuzzer/CMakeLists.txt +++ b/tests/fuzzer/CMakeLists.txt @@ -51,7 +51,7 @@ link_fuzztest(fuzz_utils) add_webp_fuzztest(advanced_api_fuzzer webpdecode webpdspdecode webputilsdecode) add_webp_fuzztest(dec_fuzzer) -add_webp_fuzztest(enc_dec_fuzzer) +add_webp_fuzztest(enc_dec_fuzzer webpdecode webpdspdecode webputilsdecode) add_webp_fuzztest(enc_fuzzer imagedec) add_webp_fuzztest(huffman_fuzzer webpdecode webpdspdecode webputilsdecode) add_webp_fuzztest(imageio_fuzzer imagedec) diff --git a/tests/fuzzer/enc_dec_fuzzer.cc b/tests/fuzzer/enc_dec_fuzzer.cc index 8b0f0ebf..96be377f 100644 --- a/tests/fuzzer/enc_dec_fuzzer.cc +++ b/tests/fuzzer/enc_dec_fuzzer.cc @@ -23,6 +23,7 @@ #include "./fuzz_utils.h" #include "src/dsp/cpu.h" +#include "src/utils/rescaler_utils.h" #include "src/webp/decode.h" #include "src/webp/encode.h" @@ -191,12 +192,18 @@ void EncDecTest(bool use_argb, fuzz_utils::WebPPictureCpp pic_cpp, fprintf(stderr, "WebPInitDecoderConfig failed.\n"); abort(); } - if (decoder_options.use_scaling && - static_cast(decoder_options.scaled_width) * - decoder_options.scaled_height > - 1000u * 1000u) { - // Skip huge scaling. - return; + if (decoder_options.use_scaling) { + int scaled_width = decoder_options.scaled_width; + int scaled_height = decoder_options.scaled_height; + if (!WebPRescalerGetScaledDimensions(pic.width, pic.height, &scaled_width, + &scaled_height)) { + // Rescaled dimensions do not make sense. + return; + } + if (static_cast(scaled_width) * scaled_height > 1000u * 1000u) { + // Skip huge scaling. + return; + } } dec_config.output.colorspace = static_cast(colorspace);