aboutsummaryrefslogtreecommitdiff
path: root/tests/fuzzer/animencoder_fuzzer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/fuzzer/animencoder_fuzzer.cc')
-rw-r--r--tests/fuzzer/animencoder_fuzzer.cc15
1 files changed, 13 insertions, 2 deletions
diff --git a/tests/fuzzer/animencoder_fuzzer.cc b/tests/fuzzer/animencoder_fuzzer.cc
index 1bd7871c..ef6ec1e4 100644
--- a/tests/fuzzer/animencoder_fuzzer.cc
+++ b/tests/fuzzer/animencoder_fuzzer.cc
@@ -47,6 +47,7 @@ int AddFrame(WebPAnimEncoder** const enc,
// Read the source picture.
if (!ExtractSourcePicture(&pic, data, size, bit_pos)) {
const WebPEncodingError error_code = pic.error_code;
+ WebPAnimEncoderDelete(*enc);
WebPPictureFree(&pic);
if (error_code == VP8_ENC_ERROR_OUT_OF_MEMORY) return 0;
fprintf(stderr, "Can't read input image. Error code: %d\n", error_code);
@@ -108,7 +109,14 @@ int AddFrame(WebPAnimEncoder** const enc,
const WebPEncodingError error_code = pic.error_code;
WebPAnimEncoderDelete(*enc);
WebPPictureFree(&pic);
- if (error_code == VP8_ENC_ERROR_OUT_OF_MEMORY) return 0;
+ // Tolerate failures when running under the nallocfuzz engine as
+ // WebPAnimEncoderAdd() may fail due to memory allocation errors outside of
+ // the encoder; in muxer functions that return booleans for instance.
+ if (error_code == VP8_ENC_ERROR_OUT_OF_MEMORY ||
+ error_code == VP8_ENC_ERROR_BAD_WRITE ||
+ getenv("NALLOC_FUZZ_VERSION") != nullptr) {
+ return 0;
+ }
fprintf(stderr, "WebPEncode failed. Error code: %d\n", error_code);
abort();
}
@@ -163,7 +171,10 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* const data, size_t size) {
}
WebPData webp_data;
WebPDataInit(&webp_data);
- if (!WebPAnimEncoderAssemble(enc, &webp_data)) {
+ // Tolerate failures when running under the nallocfuzz engine as allocations
+ // during assembly may fail.
+ if (!WebPAnimEncoderAssemble(enc, &webp_data) &&
+ getenv("NALLOC_FUZZ_VERSION") == nullptr) {
fprintf(stderr, "WebPAnimEncoderAssemble failed: %s.\n",
WebPAnimEncoderGetError(enc));
WebPAnimEncoderDelete(enc);