diff --git a/tools/Makefile b/tools/Makefile index 2b9432bcc21d4068801da5f61c634a56a8127de7..c4d9e90deaf3c8c6b6ca5090a1744c13ea02f8d5 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 e6a942cb30b7f8cfa88d578287e3119678982558..ce58fe5eaf54a23a2e497fe0a8f2d703e8b87349 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");