• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }