diff mbox series

[FFmpeg-devel,1/2] Add support for building fuzzer tools for an individual demuxer

Message ID 20201010154127.12792-1-michael@niedermayer.cc
State Accepted
Headers show
Series [FFmpeg-devel,1/2] Add support for building fuzzer tools for an individual demuxer | expand

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished

Commit Message

Michael Niedermayer Oct. 10, 2020, 3:41 p.m. UTC
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 Makefile                  |  4 ++++
 tools/Makefile            |  3 +++
 tools/target_dem_fuzzer.c | 11 ++++++++++-
 3 files changed, 17 insertions(+), 1 deletion(-)

Comments

Michael Niedermayer Oct. 12, 2020, 7:02 p.m. UTC | #1
On Sat, Oct 10, 2020 at 05:41:26PM +0200, Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  Makefile                  |  4 ++++
>  tools/Makefile            |  3 +++
>  tools/target_dem_fuzzer.c | 11 ++++++++++-
>  3 files changed, 17 insertions(+), 1 deletion(-)

will apply

[...]
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 6a0dabfc5a..c8b548d126 100644
--- a/Makefile
+++ b/Makefile
@@ -53,6 +53,9 @@  target_dec_%_fuzzer$(EXESUF): target_dec_%_fuzzer.o $(FF_DEP_LIBS)
 tools/target_bsf_%_fuzzer$(EXESUF): tools/target_bsf_%_fuzzer.o $(FF_DEP_LIBS)
 	$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
 
+target_dem_%_fuzzer$(EXESUF): target_dem_%_fuzzer.o $(FF_DEP_LIBS)
+	$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
+
 tools/target_dem_fuzzer$(EXESUF): tools/target_dem_fuzzer.o $(FF_DEP_LIBS)
 	$(LD) $(LDFLAGS) $(LDEXEFLAGS) $(LD_O) $^ $(ELIBS) $(FF_EXTRALIBS) $(LIBFUZZER_PATH)
 
@@ -63,6 +66,7 @@  tools/sofa2wavs$(EXESUF): ELIBS = $(FF_EXTRALIBS)
 tools/uncoded_frame$(EXESUF): $(FF_DEP_LIBS)
 tools/uncoded_frame$(EXESUF): ELIBS = $(FF_EXTRALIBS)
 tools/target_dec_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
+tools/target_dem_%_fuzzer$(EXESUF): $(FF_DEP_LIBS)
 
 CONFIGURABLE_COMPONENTS =                                           \
     $(wildcard $(FFLIBS:%=$(SRC_PATH)/lib%/all*.c))                 \
diff --git a/tools/Makefile b/tools/Makefile
index 88d64ce6d2..48fa131eeb 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -8,6 +8,9 @@  tools/target_dec_%_fuzzer.o: tools/target_dec_fuzzer.c
 tools/target_bsf_%_fuzzer.o: tools/target_bsf_fuzzer.c
 	$(COMPILE_C) -DFFMPEG_BSF=$*
 
+tools/target_dem_%_fuzzer.o: tools/target_dem_fuzzer.c
+	$(COMPILE_C) -DFFMPEG_DEMUXER=$* -DIO_FLAT=0
+
 tools/target_dem_fuzzer.o: tools/target_dem_fuzzer.c
 	$(COMPILE_C) -DIO_FLAT=1
 
diff --git a/tools/target_dem_fuzzer.c b/tools/target_dem_fuzzer.c
index eefb5c5fa3..b13ab526e4 100644
--- a/tools/target_dem_fuzzer.c
+++ b/tools/target_dem_fuzzer.c
@@ -34,6 +34,8 @@  typedef struct IOContext {
 
 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
 
+extern AVInputFormat * demuxer_list[];
+
 static void error(const char *err)
 {
     fprintf(stderr, "%s", err);
@@ -103,8 +105,15 @@  int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
     static int c;
     int seekable = 0;
     int ret;
+    AVInputFormat *fmt = NULL;
 
     if (!c) {
+#ifdef FFMPEG_DEMUXER
+#define DEMUXER_SYMBOL0(DEMUXER) ff_##DEMUXER##_demuxer
+#define DEMUXER_SYMBOL(DEMUXER) DEMUXER_SYMBOL0(DEMUXER)
+        extern AVInputFormat DEMUXER_SYMBOL(FFMPEG_DEMUXER);
+        fmt = &DEMUXER_SYMBOL(FFMPEG_DEMUXER);
+#endif
         av_register_all();
         avcodec_register_all();
         av_log_set_level(AV_LOG_PANIC);
@@ -166,7 +175,7 @@  int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 
     avfmt->pb = fuzzed_pb;
 
-    ret = avformat_open_input(&avfmt, filename, NULL, NULL);
+    ret = avformat_open_input(&avfmt, filename, fmt, NULL);
     if (ret < 0) {
         av_freep(&fuzzed_pb->buffer);
         av_freep(&fuzzed_pb);