From a9b5b6a97f4f4c0a9e06ea1485c02e3de58cc0b1 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sun, 30 Apr 2017 11:44:51 +0200 Subject: [PATCH] tools: Eliminate codec_type complexity from fuzzer Signed-off-by: Michael Niedermayer --- tools/Makefile | 11 ++--------- tools/target_dec_fuzzer.c | 19 +++++++++---------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/tools/Makefile b/tools/Makefile index 2b9432bcc2..c4d9e90dea 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,15 +1,8 @@ TOOLS = qt-faststart trasher uncoded_frame TOOLS-$(CONFIG_ZLIB) += cws2fws -tools/target_dec_video_%_fuzzer.o: tools/target_dec_fuzzer.c - $(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* -DFUZZ_FFMPEG_VIDEO - -tools/target_dec_audio_%_fuzzer.o: tools/target_dec_fuzzer.c - $(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* -DFUZZ_FFMPEG_AUDIO - -tools/target_dec_subtitle_%_fuzzer.o: tools/target_dec_fuzzer.c - $(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* -DFUZZ_FFMPEG_SUBTITLE - +tools/target_dec_%_fuzzer.o: tools/target_dec_fuzzer.c + $(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* OBJDIRS += tools diff --git a/tools/target_dec_fuzzer.c b/tools/target_dec_fuzzer.c index e6a942cb30..ce58fe5eaf 100644 --- a/tools/target_dec_fuzzer.c +++ b/tools/target_dec_fuzzer.c @@ -74,11 +74,6 @@ static AVCodec *AVCodecInitialize(enum AVCodecID codec_id) return res; } -#if defined(FUZZ_FFMPEG_VIDEO) -#define decode_handler avcodec_decode_video2 -#elif defined(FUZZ_FFMPEG_AUDIO) -#define decode_handler avcodec_decode_audio4 -#elif defined(FUZZ_FFMPEG_SUBTITLE) static int subtitle_handler(AVCodecContext *avctx, void *frame, int *got_sub_ptr, AVPacket *avpkt) { @@ -89,11 +84,6 @@ static int subtitle_handler(AVCodecContext *avctx, void *frame, return ret; } -#define decode_handler subtitle_handler -#else -#error "Specify encoder type" // To catch mistakes -#endif - // Class to handle buffer allocation and resize for each frame typedef struct FuzzDataBuffer { size_t size_; @@ -146,10 +136,19 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { const uint8_t *last = data; const uint8_t *end = data + size; uint32_t it = 0; + int (*decode_handler)(AVCodecContext *avctx, AVFrame *picture, + int *got_picture_ptr, + const AVPacket *avpkt) = NULL; if (!c) c = AVCodecInitialize(FFMPEG_CODEC); // Done once. + switch (c->type) { + case AVMEDIA_TYPE_AUDIO : decode_handler = avcodec_decode_audio4; break; + case AVMEDIA_TYPE_VIDEO : decode_handler = avcodec_decode_video2; break; + case AVMEDIA_TYPE_SUBTITLE: decode_handler = subtitle_handler ; break; + } + AVCodecContext* ctx = avcodec_alloc_context3(NULL); if (!ctx) error("Failed memory allocation");