1 /*
2 * Copyright (c) 2024-2025 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 <fstream>
17 #include <securec.h>
18
19 #include "audio_log.h"
20 #include "audio_collaborative_service.h"
21 #include "../fuzz_utils.h"
22
23 using namespace std;
24
25 namespace OHOS {
26 namespace AudioStandard {
27
28 FuzzUtils &g_fuzzUtils = FuzzUtils::GetInstance();
29 const size_t FUZZ_INPUT_SIZE_THRESHOLD = 10;
30 static const std::string AUDIO_COLLABORATIVE_SERVICE_LABEL = "COLLABORATIVE";
31 static const std::string BLUETOOTH_EFFECT_CHAIN_NAME = "EFFECTCHAIN_COLLABORATIVE";
32 typedef void (*TestPtr)();
33
AudioCollaborativeServiceIsCollaborativePlaybackSupportedFuzzTest()34 void AudioCollaborativeServiceIsCollaborativePlaybackSupportedFuzzTest()
35 {
36 AudioCollaborativeService &audioCollaborativeService = AudioCollaborativeService::GetAudioCollaborativeService();
37 std::vector<std::string> applyVec;
38 EffectChain effectChain(BLUETOOTH_EFFECT_CHAIN_NAME, applyVec, AUDIO_COLLABORATIVE_SERVICE_LABEL);
39 std::vector<EffectChain> effectChains;
40 effectChains.push_back(effectChain);
41 audioCollaborativeService.isCollaborativePlaybackSupported_ = g_fuzzUtils.GetData<bool>();
42 audioCollaborativeService.Init(effectChains);
43 audioCollaborativeService.IsCollaborativePlaybackSupported();
44 }
45
AudioCollaborativeServiceUpdateCurrentDeviceFuzzTest()46 void AudioCollaborativeServiceUpdateCurrentDeviceFuzzTest()
47 {
48 AudioCollaborativeService &audioCollaborativeService = AudioCollaborativeService::GetAudioCollaborativeService();
49 AudioDeviceDescriptor selectedAudioDevice;
50 selectedAudioDevice.macAddress_ = "8C-32-23-23-6C-12";
51 audioCollaborativeService.curDeviceAddress_ = "test_address";
52 selectedAudioDevice.deviceType_ = g_fuzzUtils.GetData<DeviceType>();
53 bool isEnabled = g_fuzzUtils.GetData<bool>();
54 if (isEnabled) {
55 audioCollaborativeService.addressToCollaborativeEnabledMap_.insert(
56 std::make_pair(selectedAudioDevice.macAddress_, g_fuzzUtils.GetData<bool>()));
57 } else {
58 audioCollaborativeService.curDeviceAddress_ = "";
59 audioCollaborativeService.addressToCollaborativeEnabledMap_.clear();
60 audioCollaborativeService.addressToCollaborativeMemoryMap_.insert(
61 std::make_pair(selectedAudioDevice.macAddress_, g_fuzzUtils.GetData<bool>()));
62 }
63 audioCollaborativeService.UpdateCurrentDevice(selectedAudioDevice);
64 }
65
AudioCollaborativeServiceSetCollaborativePlaybackEnabledForDeviceFuzzTest()66 void AudioCollaborativeServiceSetCollaborativePlaybackEnabledForDeviceFuzzTest()
67 {
68 AudioCollaborativeService &audioCollaborativeService = AudioCollaborativeService::GetAudioCollaborativeService();
69 std::shared_ptr<AudioDeviceDescriptor> selectedAudioDevice = std::make_shared<AudioDeviceDescriptor>();
70 bool enabled = g_fuzzUtils.GetData<bool>();
71 audioCollaborativeService.SetCollaborativePlaybackEnabledForDevice(selectedAudioDevice, enabled);
72 }
73
AudioCollaborativeServiceIsCollaborativePlaybackEnabledForDeviceFuzzTest()74 void AudioCollaborativeServiceIsCollaborativePlaybackEnabledForDeviceFuzzTest()
75 {
76 AudioCollaborativeService &audioCollaborativeService = AudioCollaborativeService::GetAudioCollaborativeService();
77 std::shared_ptr<AudioDeviceDescriptor> selectedAudioDevice = std::make_shared<AudioDeviceDescriptor>();
78 if (selectedAudioDevice == nullptr) {
79 AUDIO_ERR_LOG("selectedAudioDevice is nullptr");
80 return;
81 }
82 selectedAudioDevice->macAddress_ = "8C-32-23-23-6C-12";
83 bool isEnabled = g_fuzzUtils.GetData<bool>();
84 if (isEnabled) {
85 audioCollaborativeService.addressToCollaborativeEnabledMap_.insert(
86 std::make_pair(selectedAudioDevice->macAddress_, g_fuzzUtils.GetData<bool>()));
87 } else {
88 audioCollaborativeService.addressToCollaborativeEnabledMap_.clear();
89 }
90 audioCollaborativeService.IsCollaborativePlaybackEnabledForDevice(selectedAudioDevice);
91 }
92
AudioCollaborativeServiceUpdateCollaborativeStateRealFuzzTest()93 void AudioCollaborativeServiceUpdateCollaborativeStateRealFuzzTest()
94 {
95 AudioCollaborativeService &audioCollaborativeService = AudioCollaborativeService::GetAudioCollaborativeService();
96 audioCollaborativeService.isCollaborativePlaybackSupported_ = g_fuzzUtils.GetData<bool>();
97 audioCollaborativeService.isCollaborativeStateEnabled_ = g_fuzzUtils.GetData<bool>();
98 audioCollaborativeService.curDeviceAddress_ = "8C-32-23-23-6C-12";
99 bool isEnabled = g_fuzzUtils.GetData<bool>();
100 if (isEnabled) {
101 audioCollaborativeService.addressToCollaborativeEnabledMap_.insert(
102 std::make_pair(audioCollaborativeService.curDeviceAddress_, g_fuzzUtils.GetData<bool>()));
103 } else {
104 audioCollaborativeService.addressToCollaborativeEnabledMap_.clear();
105 }
106 audioCollaborativeService.UpdateCollaborativeStateReal();
107 }
108
AudioCollaborativeServiceIsCollaborativePlaybackSupportedSimpleFuzzTest()109 void AudioCollaborativeServiceIsCollaborativePlaybackSupportedSimpleFuzzTest()
110 {
111 AudioCollaborativeService &audioCollaborativeService = AudioCollaborativeService::GetAudioCollaborativeService();
112 audioCollaborativeService.isCollaborativePlaybackSupported_ = g_fuzzUtils.GetData<bool>();
113 bool result = audioCollaborativeService.IsCollaborativePlaybackSupported();
114 }
115
116 vector<TestPtr> g_testPtrs = {
117 AudioCollaborativeServiceIsCollaborativePlaybackSupportedFuzzTest,
118 AudioCollaborativeServiceUpdateCurrentDeviceFuzzTest,
119 AudioCollaborativeServiceSetCollaborativePlaybackEnabledForDeviceFuzzTest,
120 AudioCollaborativeServiceIsCollaborativePlaybackEnabledForDeviceFuzzTest,
121 AudioCollaborativeServiceUpdateCollaborativeStateRealFuzzTest,
122 AudioCollaborativeServiceIsCollaborativePlaybackSupportedSimpleFuzzTest,
123 };
124
125 } // namespace AudioStandard
126 } // namesapce OHOS
127
128 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)129 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
130 {
131 if (size < OHOS::AudioStandard::FUZZ_INPUT_SIZE_THRESHOLD) {
132 return 0;
133 }
134
135 OHOS::AudioStandard::g_fuzzUtils.fuzzTest(data, size, OHOS::AudioStandard::g_testPtrs);
136 return 0;
137 }