diff --git a/fuzzers/fuzzer_load.c b/fuzzers/fuzzer_load.c new file mode 100644 index 0000000000..c7fafd5638 --- /dev/null +++ b/fuzzers/fuzzer_load.c @@ -0,0 +1,65 @@ +/* + * This file is part of mpv. + * + * mpv is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * mpv is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with mpv. If not, see . + */ + +#include +#include +#include + +#include + +#include + +#include "common.h" + +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + if (size == 0) + return -1; + + char filename[15 + 10 + 1]; + sprintf(filename, "/tmp/libfuzzer.%d", getpid()); + + FILE *fp = fopen(filename, "wb"); + if (!fp) + exit(1); + + if (fwrite(data, size, 1, fp) != 1) + exit(1); + + if (fclose(fp)) + exit(1); + + mpv_handle *ctx = mpv_create(); + if (!ctx) + exit(1); + + check_error(mpv_set_option_string(ctx, "vo", "null")); + check_error(mpv_set_option_string(ctx, "ao", "null")); + check_error(mpv_set_option_string(ctx, "ao-null-untimed", "yes")); + check_error(mpv_set_option_string(ctx, "untimed", "yes")); + check_error(mpv_set_option_string(ctx, "video-osd", "no")); + check_error(mpv_set_option_string(ctx, "msg-level", "all=trace")); + + check_error(mpv_initialize(ctx)); + + const char *cmd[] = {"load-" MPV_LOAD, filename, NULL}; + check_error(mpv_command(ctx, cmd)); + + mpv_terminate_destroy(ctx); + + return 0; +} diff --git a/fuzzers/meson.build b/fuzzers/meson.build index a5a3ba7145..2083416090 100644 --- a/fuzzers/meson.build +++ b/fuzzers/meson.build @@ -24,3 +24,11 @@ foreach f : ['MPV_FORMAT_STRING', 'MPV_FORMAT_FLAG', 'MPV_FORMAT_INT64', 'MPV_FO link_with: libmpv) endforeach endforeach + +foreach cmd : ['config-file', 'input-conf'] + executable('fuzzer_load_' + cmd.underscorify(), + 'fuzzer_load.c', + c_args: ['-DMPV_LOAD="' + cmd + '"'], + include_directories: incdir, + link_with: libmpv) +endforeach