From 4842c78e9306f00d9ef081f6a0070ec227603d09 Mon Sep 17 00:00:00 2001 From: Alex Loiko Date: Tue, 23 Oct 2018 13:43:28 +0200 Subject: [PATCH] Increasing APM fuzzer coverage. Add AecDump to the list of fuzzed stuff. Attaches an AecDump to the Audio Processing Module in the APM-fuzzer. The AecDump writes to /dev/null. Bug: webrtc:7820 Change-Id: I03916ce4d1c69906ca8bb7e6fbe29c11e4ea55e5 Reviewed-on: https://webrtc-review.googlesource.com/c/107622 Reviewed-by: Sam Zackrisson Commit-Queue: Alex Loiko Cr-Commit-Position: refs/heads/master@{#25321} --- test/fuzzers/BUILD.gn | 4 +++- test/fuzzers/audio_processing_configs_fuzzer.cc | 16 +++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn index 57b8bf96dc..dc1acc7db8 100644 --- a/test/fuzzers/BUILD.gn +++ b/test/fuzzers/BUILD.gn @@ -502,9 +502,11 @@ webrtc_fuzzer_test("audio_processing_fuzzer") { "../../api/audio:aec3_factory", "../../modules/audio_processing", "../../modules/audio_processing/aec3", - "../../modules/audio_processing/aec_dump:mock_aec_dump", + "../../modules/audio_processing/aec_dump", + "../../modules/audio_processing/aec_dump:aec_dump_impl", "../../rtc_base:ptr_util", "../../rtc_base:rtc_base_approved", + "../../rtc_base:rtc_task_queue", "../../rtc_base:safe_minmax", "../../system_wrappers:field_trial", "//third_party/abseil-cpp/absl/memory", diff --git a/test/fuzzers/audio_processing_configs_fuzzer.cc b/test/fuzzers/audio_processing_configs_fuzzer.cc index 053e4c03c2..5b00209315 100644 --- a/test/fuzzers/audio_processing_configs_fuzzer.cc +++ b/test/fuzzers/audio_processing_configs_fuzzer.cc @@ -13,10 +13,11 @@ #include "absl/memory/memory.h" #include "api/audio/echo_canceller3_factory.h" -#include "modules/audio_processing/aec_dump/mock_aec_dump.h" +#include "modules/audio_processing/aec_dump/aec_dump_factory.h" #include "modules/audio_processing/include/audio_processing.h" #include "rtc_base/arraysize.h" #include "rtc_base/numerics/safe_minmax.h" +#include "rtc_base/task_queue.h" #include "system_wrappers/include/field_trial.h" #include "test/fuzzers/audio_processing_fuzzer_helper.h" #include "test/fuzzers/fuzz_data_helper.h" @@ -61,7 +62,8 @@ const std::string kFieldTrialNames[] = { }; std::unique_ptr CreateApm(test::FuzzDataHelper* fuzz_data, - std::string* field_trial_string) { + std::string* field_trial_string, + rtc::TaskQueue* worker_queue) { // Parse boolean values for optionally enabling different // configurable public components of APM. bool exp_agc = fuzz_data->ReadOrDefaultValue(true); @@ -136,8 +138,9 @@ std::unique_ptr CreateApm(test::FuzzDataHelper* fuzz_data, .SetEchoControlFactory(std::move(echo_control_factory)) .Create(config)); - apm->AttachAecDump( - absl::make_unique>()); +#ifdef WEBRTC_LINUX + apm->AttachAecDump(AecDumpFactory::Create("/dev/null", -1, worker_queue)); +#endif webrtc::AudioProcessing::Config apm_config; apm_config.echo_canceller.enabled = use_aec || use_aecm; @@ -165,7 +168,10 @@ void FuzzOneInput(const uint8_t* data, size_t size) { // This string must be in scope during execution, according to documentation // for field_trial.h. Hence it's created here and not in CreateApm. std::string field_trial_string = ""; - auto apm = CreateApm(&fuzz_data, &field_trial_string); + + std::unique_ptr worker_queue( + new rtc::TaskQueue("rtc-low-prio", rtc::TaskQueue::Priority::LOW)); + auto apm = CreateApm(&fuzz_data, &field_trial_string, worker_queue.get()); if (apm) { FuzzAudioProcessing(&fuzz_data, std::move(apm));