diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2017-05-03 16:36:39 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2017-05-03 17:22:13 +0200 |
commit | dec2fa8cc7089605d1d934d65dd2709cfe8aece2 (patch) | |
tree | 542fefe2a13ca58da2b32d8ca4f4e4ec19ac4df9 | |
parent | 3f17751eeb7e3348576e2597884d5e5155aadcfb (diff) | |
download | ffmpeg-dec2fa8cc7089605d1d934d65dd2709cfe8aece2.tar.gz |
tools/target_dec_fuzzer: Use decoder and not codec_id as argument
This allows fuzzing decoders with the same codec_id
We also avoid register all to allow the linker to prune unused sections and symbols
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | tools/Makefile | 2 | ||||
-rw-r--r-- | tools/target_dec_fuzzer.c | 16 |
2 files changed, 15 insertions, 3 deletions
diff --git a/tools/Makefile b/tools/Makefile index c4d9e90dea..3ebd3619ca 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -2,7 +2,7 @@ TOOLS = qt-faststart trasher uncoded_frame TOOLS-$(CONFIG_ZLIB) += cws2fws tools/target_dec_%_fuzzer.o: tools/target_dec_fuzzer.c - $(COMPILE_C) -DFFMPEG_CODEC=AV_CODEC_ID_$* + $(COMPILE_C) -DFFMPEG_DECODER=$* OBJDIRS += tools diff --git a/tools/target_dec_fuzzer.c b/tools/target_dec_fuzzer.c index 65e79ebfe0..19423e27f2 100644 --- a/tools/target_dec_fuzzer.c +++ b/tools/target_dec_fuzzer.c @@ -66,7 +66,7 @@ static AVCodec *c = NULL; static AVCodec *AVCodecInitialize(enum AVCodecID codec_id) { AVCodec *res; - avcodec_register_all(); + av_log_set_level(AV_LOG_PANIC); res = avcodec_find_decoder(codec_id); if (!res) @@ -140,8 +140,20 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { int *got_picture_ptr, const AVPacket *avpkt) = NULL; - if (!c) + if (!c) { +#ifdef FFMPEG_DECODER +#define DECODER_SYMBOL0(CODEC) ff_##CODEC##_decoder +#define DECODER_SYMBOL(CODEC) DECODER_SYMBOL0(CODEC) + extern AVCodec DECODER_SYMBOL(FFMPEG_DECODER); + avcodec_register(&DECODER_SYMBOL(FFMPEG_DECODER)); + int codec_id = DECODER_SYMBOL(FFMPEG_DECODER).id; + + c = AVCodecInitialize(codec_id); // Done once. +#else + avcodec_register_all(); c = AVCodecInitialize(FFMPEG_CODEC); // Done once. +#endif + } switch (c->type) { case AVMEDIA_TYPE_AUDIO : decode_handler = avcodec_decode_audio4; break; |