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