[FFmpeg-cvslog] tools/target_dec_fuzzer: Use decoder and not codec_id as argument

Michael Niedermayer git at videolan.org
Wed May 3 18:27:43 EEST 2017


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Wed May  3 16:36:39 2017 +0200| [dec2fa8cc7089605d1d934d65dd2709cfe8aece2] | committer: Michael Niedermayer

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 at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=dec2fa8cc7089605d1d934d65dd2709cfe8aece2
---

 tools/Makefile            |  2 +-
 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;



More information about the ffmpeg-cvslog mailing list