1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "audiocaptureradapter_fuzzer.h"
17
18 #include <cstring>
19 #include <securec.h>
20
21 #include "audio_capturer_adapter_impl.h"
22
23 using namespace OHOS::NWeb;
24
25 class MockAudioCapturerOptionsAdapter : public AudioCapturerOptionsAdapter {
26 public:
27 MockAudioCapturerOptionsAdapter() = default;
28
GetSamplingRate()29 AudioAdapterSamplingRate GetSamplingRate() override
30 {
31 return samplingRate;
32 }
33
GetEncoding()34 AudioAdapterEncodingType GetEncoding() override
35 {
36 return encoding;
37 }
38
GetSampleFormat()39 AudioAdapterSampleFormat GetSampleFormat() override
40 {
41 return format;
42 }
43
GetChannels()44 AudioAdapterChannel GetChannels() override
45 {
46 return channels;
47 }
48
GetSourceType()49 AudioAdapterSourceType GetSourceType() override
50 {
51 return sourceType;
52 }
53
GetCapturerFlags()54 int32_t GetCapturerFlags() override
55 {
56 return capturerFlags;
57 }
58
59 AudioAdapterSamplingRate samplingRate;
60 AudioAdapterEncodingType encoding;
61 AudioAdapterSampleFormat format;
62 AudioAdapterChannel channels;
63 AudioAdapterSourceType sourceType;
64 int32_t capturerFlags;
65 };
66
67 namespace OHOS {
AudioCapturerFuzzTest(const uint8_t * data,size_t size)68 bool AudioCapturerFuzzTest(const uint8_t* data, size_t size)
69 {
70 if ((data == nullptr) || (size == 0)) {
71 return false;
72 }
73
74 std::shared_ptr<MockAudioCapturerOptionsAdapter> capturerOptions =
75 std::make_shared<MockAudioCapturerOptionsAdapter>();
76
77 capturerOptions->samplingRate = AudioAdapterSamplingRate::SAMPLE_RATE_44100;
78 capturerOptions->encoding = AudioAdapterEncodingType::ENCODING_PCM;
79 capturerOptions->format = AudioAdapterSampleFormat::SAMPLE_S16LE;
80 capturerOptions->channels = AudioAdapterChannel::STEREO;
81 capturerOptions->sourceType = AudioAdapterSourceType::SOURCE_TYPE_MIC;
82 capturerOptions->capturerFlags = 0;
83
84 std::string cachePath(reinterpret_cast<const char*>(data), size);
85 AudioCapturerAdapterImpl adapter;
86
87 adapter.Create(capturerOptions, cachePath);
88 adapter.Start();
89 adapter.Stop();
90 adapter.Release();
91
92 auto callback = std::make_shared<AudioCapturerReadCallbackAdapter>();
93 adapter.SetCapturerReadCallback(callback);
94
95 std::shared_ptr<BufferDescAdapter> bufferDesc = std::make_shared<BufferDescAdapter>();
96 adapter.GetBufferDesc(bufferDesc);
97 adapter.Enqueue(bufferDesc);
98
99 uint32_t frameCount;
100 adapter.GetFrameCount(frameCount);
101
102 int64_t audioTime = adapter.GetAudioTime();
103
104 adapter.GetAudioSamplingRate(AudioAdapterSamplingRate::SAMPLE_RATE_32000);
105 adapter.GetAudioEncodingType(AudioAdapterEncodingType::ENCODING_INVALID);
106 adapter.GetAudioSampleFormat(AudioAdapterSampleFormat::SAMPLE_S16LE);
107 adapter.GetAudioChannel(AudioAdapterChannel::CHANNEL_4);
108 adapter.GetAudioSourceType(AudioAdapterSourceType::SOURCE_TYPE_VOICE_COMMUNICATION);
109
110 return true;
111 }
112 } // namespace OHOS
113
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)114 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
115 {
116 OHOS::AudioCapturerFuzzTest(data, size);
117 return 0;
118 }
119