tools: Eliminate codec_type complexity from fuzzer
authorMichael Niedermayer <michael@niedermayer.cc>
Sun, 30 Apr 2017 09:44:51 +0000 (11:44 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sun, 30 Apr 2017 12:24:51 +0000 (14:24 +0200)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
tools/Makefile
tools/target_dec_fuzzer.c

index 2b9432b..c4d9e90 100644 (file)
@@ -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
 
index e6a942c..ce58fe5 100644 (file)
@@ -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");