1 /*
2 * Copyright (c) 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 "init_fuzzer.h"
17
18 #include <securec.h>
19 #include <sys/mman.h>
20 #include <fuzzer/FuzzedDataProvider.h>
21
22 #include "ohos_adapter_helper.h"
23 #include "screen_capture_adapter_impl.h"
24
25 using namespace OHOS::NWeb;
26
27 class MockVideoEncInfoAdapter : public VideoEncInfoAdapter {
28 public:
29 MockVideoEncInfoAdapter() = default;
30
GetVideoCodecFormat()31 VideoCodecFormatAdapter GetVideoCodecFormat() override
32 {
33 return videoCodec;
34 }
35
GetVideoBitrate()36 int32_t GetVideoBitrate() override
37 {
38 return videoBitrate;
39 }
40
GetVideoFrameRate()41 int32_t GetVideoFrameRate() override
42 {
43 return videoFrameRate;
44 }
45
46 VideoCodecFormatAdapter videoCodec = VideoCodecFormatAdapter::VIDEO_DEFAULT;
47 int32_t videoBitrate = 0;
48 int32_t videoFrameRate = 0;
49 };
50
51 class MockVideoCaptureInfoAdapter : public VideoCaptureInfoAdapter {
52 public:
53 MockVideoCaptureInfoAdapter() = default;
54
GetDisplayId()55 uint64_t GetDisplayId() override
56 {
57 return displayId;
58 }
59
GetTaskIDs()60 std::list<int32_t> GetTaskIDs() override
61 {
62 return taskIDs;
63 }
64
GetVideoFrameWidth()65 int32_t GetVideoFrameWidth() override
66 {
67 return videoFrameWidth;
68 }
69
GetVideoFrameHeight()70 int32_t GetVideoFrameHeight() override
71 {
72 return videoFrameHeight;
73 }
74
GetVideoSourceType()75 VideoSourceTypeAdapter GetVideoSourceType() override
76 {
77 return videoSource;
78 }
79
80 uint64_t displayId = 0;
81 std::list<int32_t> taskIDs;
82 int32_t videoFrameWidth = 0;
83 int32_t videoFrameHeight = 0;
84 VideoSourceTypeAdapter videoSource = VideoSourceTypeAdapter::VIDEO_SOURCE_SURFACE_RGBA;
85 };
86
87 class VideoInfoAdapterMock : public VideoInfoAdapter {
88 public:
89 VideoInfoAdapterMock() = default;
90
GetVideoCapInfo()91 std::shared_ptr<VideoCaptureInfoAdapter> GetVideoCapInfo()
92 {
93 return videoCapInfo;
94 }
95
GetVideoEncInfo()96 std::shared_ptr<VideoEncInfoAdapter> GetVideoEncInfo()
97 {
98 return videoEncInfo;
99 }
100
101 std::shared_ptr<MockVideoCaptureInfoAdapter> videoCapInfo = nullptr;
102 std::shared_ptr<MockVideoEncInfoAdapter> videoEncInfo = nullptr;
103 };
104
105 class MockAudioCaptureInfoAdapter : public AudioCaptureInfoAdapter {
106 public:
107 MockAudioCaptureInfoAdapter() = default;
108
GetAudioSampleRate()109 int32_t GetAudioSampleRate() override
110 {
111 return audioSampleRate;
112 }
113
GetAudioChannels()114 int32_t GetAudioChannels() override
115 {
116 return audioChannels;
117 }
118
GetAudioSource()119 AudioCaptureSourceTypeAdapter GetAudioSource() override
120 {
121 return audioSource;
122 }
123
124 int32_t audioSampleRate;
125 int32_t audioChannels;
126 AudioCaptureSourceTypeAdapter audioSource = AudioCaptureSourceTypeAdapter::SOURCE_DEFAULT;
127 };
128
129 class MockAudioEncInfoAdapter : public AudioEncInfoAdapter {
130 public:
131 MockAudioEncInfoAdapter() = default;
132
GetAudioBitrate()133 int32_t GetAudioBitrate() override
134 {
135 return audioBitrate;
136 }
137
GetAudioCodecformat()138 AudioCodecFormatAdapter GetAudioCodecformat() override
139 {
140 return audioCodecformat;
141 }
142
143 int32_t audioBitrate = 0;
144 AudioCodecFormatAdapter audioCodecformat = AudioCodecFormatAdapter::AUDIO_DEFAULT;
145 };
146
147 class AudioInfoAdapterMock : public AudioInfoAdapter {
148 public:
149 AudioInfoAdapterMock() = default;
150
GetMicCapInfo()151 std::shared_ptr<AudioCaptureInfoAdapter> GetMicCapInfo() override
152 {
153 return micCapInfo;
154 }
155
GetInnerCapInfo()156 std::shared_ptr<AudioCaptureInfoAdapter> GetInnerCapInfo() override
157 {
158 return innerCapInfo;
159 }
160
GetAudioEncInfo()161 std::shared_ptr<AudioEncInfoAdapter> GetAudioEncInfo() override
162 {
163 return audioEncInfo;
164 }
165
166 std::shared_ptr<MockAudioCaptureInfoAdapter> micCapInfo = nullptr;
167 std::shared_ptr<MockAudioCaptureInfoAdapter> innerCapInfo = nullptr;
168 std::shared_ptr<MockAudioEncInfoAdapter> audioEncInfo = nullptr;
169 };
170
171 class RecorderInfoAdapterMock : public RecorderInfoAdapter {
172 public:
173 RecorderInfoAdapterMock() = default;
174
GetUrl()175 std::string GetUrl() override
176 {
177 return url;
178 }
179
GetFileFormat()180 ContainerFormatTypeAdapter GetFileFormat() override
181 {
182 return fileFormat;
183 }
184
185 std::string url = "";
186 ContainerFormatTypeAdapter fileFormat = ContainerFormatTypeAdapter::CFT_MPEG_4A_TYPE;
187 };
188
189 class ScreenCaptureConfigAdapterMock : public ScreenCaptureConfigAdapter {
190 public:
191 ScreenCaptureConfigAdapterMock();
192 ~ScreenCaptureConfigAdapterMock() override;
193
194 CaptureModeAdapter GetCaptureMode() override;
195 DataTypeAdapter GetDataType() override;
196 std::shared_ptr<AudioInfoAdapter> GetAudioInfo() override;
197 std::shared_ptr<VideoInfoAdapter> GetVideoInfo() override;
198 std::shared_ptr<RecorderInfoAdapter> GetRecorderInfo() override;
199 };
200
ScreenCaptureConfigAdapterMock()201 ScreenCaptureConfigAdapterMock::ScreenCaptureConfigAdapterMock() {}
202
~ScreenCaptureConfigAdapterMock()203 ScreenCaptureConfigAdapterMock::~ScreenCaptureConfigAdapterMock() {}
204
GetCaptureMode()205 CaptureModeAdapter ScreenCaptureConfigAdapterMock::GetCaptureMode()
206 {
207 return CaptureModeAdapter::CAPTURE_HOME_SCREEN;
208 }
209
GetDataType()210 DataTypeAdapter ScreenCaptureConfigAdapterMock::GetDataType()
211 {
212 return DataTypeAdapter::ORIGINAL_STREAM_DATA_TYPE;
213 }
214
GetAudioInfo()215 std::shared_ptr<AudioInfoAdapter> ScreenCaptureConfigAdapterMock::GetAudioInfo()
216 {
217 auto audioInfo = std::make_shared<AudioInfoAdapterMock>();
218 return audioInfo;
219 }
220
GetVideoInfo()221 std::shared_ptr<VideoInfoAdapter> ScreenCaptureConfigAdapterMock::GetVideoInfo()
222 {
223 auto videoInfo = std::make_shared<VideoInfoAdapterMock>();
224 return videoInfo;
225 }
226
GetRecorderInfo()227 std::shared_ptr<RecorderInfoAdapter> ScreenCaptureConfigAdapterMock::GetRecorderInfo()
228 {
229 auto recorderInfo = std::make_shared<RecorderInfoAdapterMock>();
230 return recorderInfo;
231 }
232
233 namespace OHOS {
234
ApplyInitFuzzTest(const uint8_t * data,size_t size)235 bool ApplyInitFuzzTest(const uint8_t* data, size_t size)
236 {
237 if ((data == nullptr) || (size == 0)) {
238 return true;
239 }
240 ScreenCaptureAdapterImpl impl;
241 std::shared_ptr<ScreenCaptureConfigAdapter> config = std::make_shared<ScreenCaptureConfigAdapterMock>();
242 impl.Init(config);
243 return true;
244 }
245
246 } // namespace OHOS
247
248 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)249 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
250 {
251 OHOS::ApplyInitFuzzTest(data, size);
252 return 0;
253 }