1 /*
2  * Copyright (c) 2024 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 "fuzzer/FuzzedDataProvider.h"
17 #include "napi/native_api.h"
18 #include "message_parcel.h"
19 #include "scanhelper_fuzzer.h"
20 #include "scan_option_descriptor.h"
21 #include "scan_option_value.h"
22 #include "scan_parameters.h"
23 #include "scan_progress.h"
24 #include "scanner_info.h"
25 #include "scan_range.h"
26 #include "scan_option_descriptor_helper.h"
27 #include "scan_option_value_helper.h"
28 #include "scan_parameters_helper.h"
29 #include "scan_progress_helper.h"
30 #include "scan_range_helper.h"
31 #include "scanner_info_helper.h"
32 
33 namespace OHOS {
34 namespace Scan {
35 constexpr uint8_t MAX_STRING_LENGTH = 255;
36 constexpr int MAX_SET_NUMBER = 100;
37 constexpr size_t FOO_MAX_LEN = 1024;
38 constexpr size_t U32_AT_SIZE = 4;
39 
TestSetOptionName(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)40 void TestSetOptionName(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
41 {
42     ScanOptionDescriptor scanOptDes;
43     std::string optionName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
44     scanOptDes.SetOptionName(optionName);
45     optionName = scanOptDes.GetOptionName();
46 }
47 
TestSetOptionTitle(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)48 void TestSetOptionTitle(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
49 {
50     ScanOptionDescriptor scanOptDes;
51     std::string optionTitle = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
52     scanOptDes.SetOptionTitle(optionTitle);
53     optionTitle = scanOptDes.GetOptionTitle();
54 }
55 
TestSetOptionDesc(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)56 void TestSetOptionDesc(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
57 {
58     ScanOptionDescriptor scanOptDes;
59     std::string optionDesc = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
60     scanOptDes.SetOptionDesc(optionDesc);
61     optionDesc = scanOptDes.GetOptionDesc();
62 }
63 
TestSetOptionType(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)64 void TestSetOptionType(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
65 {
66     ScanOptionDescriptor scanOptDes;
67     uint32_t optionType = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
68     scanOptDes.SetOptionType(optionType);
69     optionType = scanOptDes.GetOptionType();
70 }
71 
TestSetOptionUnit(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)72 void TestSetOptionUnit(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
73 {
74     ScanOptionDescriptor scanOptDes;
75     uint32_t optionUnit = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
76     scanOptDes.SetOptionUnit(optionUnit);
77     optionUnit = scanOptDes.GetOptionUnit();
78 }
79 
TestSetOptionSize(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)80 void TestSetOptionSize(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
81 {
82     ScanOptionDescriptor scanOptDes;
83     int32_t optionSize = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
84     scanOptDes.SetOptionSize(optionSize);
85     optionSize = scanOptDes.GetOptionSize();
86 }
87 
TestSetOptionCap(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)88 void TestSetOptionCap(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
89 {
90     ScanOptionDescriptor scanOptDes;
91     int32_t optionCap = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
92     scanOptDes.SetOptionCap(optionCap);
93     optionCap = scanOptDes.GetOptionCap();
94 }
95 
TestSetOptionConstraintType(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)96 void TestSetOptionConstraintType(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
97 {
98     ScanOptionDescriptor scanOptDes;
99     uint32_t optionConstraintType = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
100     scanOptDes.SetOptionConstraintType(optionConstraintType);
101     optionConstraintType = scanOptDes.GetOptionConstraintType();
102 }
103 
TestSetOptionConstraintString(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)104 void TestSetOptionConstraintString(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
105 {
106     ScanOptionDescriptor scanOptDes;
107     std::vector<std::string> optionConstraintString;
108     int32_t vectorSize = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
109     for (int i = 0; i< vectorSize; i++) {
110         std::string teststr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
111         optionConstraintString.emplace_back(teststr);
112     }
113     scanOptDes.SetOptionConstraintString(optionConstraintString);
114     scanOptDes.GetOptionConstraintString(optionConstraintString);
115 }
116 
TestSetOptionConstraintNumber(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)117 void TestSetOptionConstraintNumber(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
118 {
119     ScanOptionDescriptor scanOptDes;
120     std::vector<int32_t> optionConstraintNumber;
121     int32_t vectorSize = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
122     for (int i = 0; i< vectorSize; i++) {
123         int32_t testNumber = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
124         optionConstraintNumber.emplace_back(testNumber);
125     }
126     scanOptDes.SetOptionConstraintNumber(optionConstraintNumber);
127     scanOptDes.GetOptionConstraintNumber(optionConstraintNumber);
128 }
129 
TestSetOptionConstraintRange(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)130 void TestSetOptionConstraintRange(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
131 {
132     ScanOptionDescriptor scanOptDes;
133     ScanRange optionConstraintRange;
134     scanOptDes.SetOptionConstraintRange(optionConstraintRange);
135     scanOptDes.GetOptionConstraintRange(optionConstraintRange);
136     std::string optionName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
137     scanOptDes.SetOptionName(optionName);
138 }
139 
TestScanOptionDescriptor(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)140 void TestScanOptionDescriptor(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
141 {
142     ScanOptionDescriptor scanOptDesTmp;
143     uint32_t optionConstraintType = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
144     scanOptDesTmp.SetOptionConstraintType(optionConstraintType);
145     ScanOptionDescriptor scanOptDesBak(scanOptDesTmp);
146     ScanOptionDescriptor scanOptDesOpera = scanOptDesTmp;
147     scanOptDesOpera.Dump();
148     MessageParcel parcel;
149     scanOptDesOpera.Marshalling(parcel);
150     auto scanOptDesMarShall = ScanOptionDescriptor::Unmarshalling(parcel);
151 }
152 
TestSetScanOptionValueType(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)153 void TestSetScanOptionValueType(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
154 {
155     ScanOptionValue scanOptVal;
156     int32_t valueType = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
157     scanOptVal.SetScanOptionValueType(static_cast<ScanOptionValueType>(valueType));
158     valueType = scanOptVal.GetScanOptionValueType();
159 }
160 
TestSetValueSize(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)161 void TestSetValueSize(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
162 {
163     ScanOptionValue scanOptVal;
164     int32_t valueSize = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
165     scanOptVal.SetValueSize(valueSize);
166     valueSize = scanOptVal.GetValueSize();
167 }
168 
TestSetNumValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)169 void TestSetNumValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
170 {
171     ScanOptionValue scanOptVal;
172     int32_t numValue = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
173     scanOptVal.SetNumValue(numValue);
174     numValue = scanOptVal.GetNumValue();
175 }
176 
TestSetNumListValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)177 void TestSetNumListValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
178 {
179     ScanOptionValue scanOptVal;
180     int32_t vecSize = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
181     std::vector<int32_t> numListValue;
182     for (int i = 0; i < vecSize; i++) {
183         int32_t number = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
184         numListValue.emplace_back(number);
185     }
186     scanOptVal.SetNumListValue(numListValue);
187     scanOptVal.GetNumListValue(numListValue);
188 }
189 
TestSetStrValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)190 void TestSetStrValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
191 {
192     ScanOptionValue scanOptVal;
193     std::string optionTitle = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
194     scanOptVal.SetStrValue(optionTitle);
195     optionTitle = scanOptVal.GetStrValue();
196 }
197 
TestSetBoolValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)198 void TestSetBoolValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
199 {
200     ScanOptionValue scanOptVal;
201     bool boolValue = dataProvider->ConsumeBool();
202     scanOptVal.SetBoolValue(boolValue);
203     boolValue = scanOptVal.GetBoolValue();
204 }
205 
TestScanOptionValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)206 void TestScanOptionValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
207 {
208     ScanOptionValue scanOptVal;
209     int32_t valueType = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
210     scanOptVal.SetScanOptionValueType(static_cast<ScanOptionValueType>(valueType));
211     ScanOptionValue scanOptValBak = scanOptVal;
212     scanOptValBak.Reset();
213     ScanOptionValue scanOptValOpera(scanOptValBak);
214     int32_t valueSize = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
215     scanOptValOpera.SetValueSize(valueSize);
216     MessageParcel parcel;
217     scanOptValOpera.Marshalling(parcel);
218     auto scanOptValMarShall = ScanOptionDescriptor::Unmarshalling(parcel);
219     scanOptValMarShall->Dump();
220 }
221 
TestSetFormat(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)222 void TestSetFormat(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
223 {
224     ScanParameters scanPara;
225     int32_t format = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
226     scanPara.SetFormat(static_cast<ScanFrame>(format));
227     format = scanPara.GetFormat();
228 }
229 
TestSetLastFrame(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)230 void TestSetLastFrame(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
231 {
232     ScanParameters scanPara;
233     bool lastFrame = dataProvider->ConsumeBool();
234     scanPara.SetLastFrame(lastFrame);
235     lastFrame = scanPara.GetLastFrame();
236 }
237 
TestSetBytesPerLine(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)238 void TestSetBytesPerLine(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
239 {
240     ScanParameters scanPara;
241     int32_t bytesPerLine = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
242     scanPara.SetBytesPerLine(bytesPerLine);
243     bytesPerLine = scanPara.GetBytesPerLine();
244 }
245 
TestSetPixelsPerLine(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)246 void TestSetPixelsPerLine(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
247 {
248     ScanParameters scanPara;
249     int32_t pixelsPerLine = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
250     scanPara.SetPixelsPerLine(pixelsPerLine);
251     pixelsPerLine = scanPara.GetPixelsPerLine();
252 }
253 
TestSetLines(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)254 void TestSetLines(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
255 {
256     ScanParameters scanPara;
257     int32_t lines = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
258     scanPara.SetLines(lines);
259     lines = scanPara.GetLines();
260 }
261 
TestSetDepth(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)262 void TestSetDepth(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
263 {
264     ScanParameters scanPara;
265     int32_t depth = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
266     scanPara.SetDepth(depth);
267     depth = scanPara.GetDepth();
268 }
269 
TestScanParameters(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)270 void TestScanParameters(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
271 {
272     ScanParameters scanPara;
273     int32_t lines = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
274     scanPara.SetLines(lines);
275     ScanParameters scanParaTmp(scanPara);
276     ScanParameters scanParaBak = scanParaTmp;
277     scanParaBak.Dump();
278     MessageParcel parcel;
279     scanParaBak.Marshalling(parcel);
280     auto scanParaBakMarShall = ScanParameters::Unmarshalling(parcel);
281 }
282 
TestSetScanProgress(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)283 void TestSetScanProgress(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
284 {
285     ScanProgress scanProg;
286     int32_t progress = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
287     scanProg.SetScanProgress(progress);
288     progress = scanProg.GetScanProgress();
289 }
290 
TestSetScanPictureFd(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)291 void TestSetScanPictureFd(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
292 {
293     ScanProgress scanProg;
294     int32_t fd = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
295     scanProg.SetScanPictureFd(fd);
296     fd = scanProg.GetScanPictureFd();
297 }
298 
TestSetIsFinal(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)299 void TestSetIsFinal(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
300 {
301     ScanProgress scanProg;
302     bool isFinal = dataProvider->ConsumeBool();
303     scanProg.SetIsFinal(isFinal);
304     isFinal = scanProg.GetIsFinal();
305 }
306 
TestSetPictureId(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)307 void TestSetPictureId(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
308 {
309     ScanProgress scanProg;
310     int32_t pictureId = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
311     scanProg.SetPictureId(pictureId);
312     pictureId = scanProg.GetPictureId();
313 }
314 
TestSetTaskCode(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)315 void TestSetTaskCode(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
316 {
317     ScanProgress scanProg;
318     int32_t taskCode = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
319     scanProg.SetTaskCode(static_cast<ScanErrorCode>(taskCode));
320     taskCode = scanProg.GetTaskCode();
321 }
322 
TestScanProgress(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)323 void TestScanProgress(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
324 {
325     ScanProgress scanProg;
326     int32_t taskCode = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
327     scanProg.SetTaskCode(static_cast<ScanErrorCode>(taskCode));
328     scanProg.Dump();
329     taskCode = scanProg.GetTaskCode();
330     ScanProgress scanProgTmp(scanProg);
331     ScanProgress scanProgBak = scanProgTmp;
332     MessageParcel parcel;
333     scanProgBak.Marshalling(parcel);
334     auto scanOptValMarShall = ScanProgress::Unmarshalling(parcel);
335 }
336 
TestTCPSetDeviceName(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)337 void TestTCPSetDeviceName(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
338 {
339     ScanDeviceInfoTCP scanDevInfoTcp;
340     std::string deviceName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
341     scanDevInfoTcp.SetDeviceName(deviceName);
342     deviceName = scanDevInfoTcp.GetDeviceName();
343 }
344 
TestTCPSetUuid(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)345 void TestTCPSetUuid(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
346 {
347     ScanDeviceInfoTCP scanDevInfoTcp;
348     std::string uuid = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
349     scanDevInfoTcp.SetUuid(uuid);
350     uuid = scanDevInfoTcp.GetUuid();
351 }
352 
TestTCPSetModel(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)353 void TestTCPSetModel(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
354 {
355     ScanDeviceInfoTCP scanDevInfoTcp;
356     std::string model = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
357     scanDevInfoTcp.SetModel(model);
358     model = scanDevInfoTcp.GetModel();
359 }
360 
TestTCPSetManufacturer(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)361 void TestTCPSetManufacturer(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
362 {
363     ScanDeviceInfoTCP scanDevInfoTcp;
364     std::string manufacturer = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
365     scanDevInfoTcp.SetManufacturer(manufacturer);
366     manufacturer = scanDevInfoTcp.GetManufacturer();
367 }
368 
TestTCPSetDeviceType(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)369 void TestTCPSetDeviceType(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
370 {
371     ScanDeviceInfoTCP scanDevInfoTcp;
372     std::string deviceType = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
373     scanDevInfoTcp.SetDeviceType(deviceType);
374     deviceType = scanDevInfoTcp.GetDeviceType();
375 }
376 
TestTCPSetPort(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)377 void TestTCPSetPort(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
378 {
379     ScanDeviceInfoTCP scanDevInfoTcp;
380     std::string port = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
381     scanDevInfoTcp.SetPort(port);
382     port = scanDevInfoTcp.GetPort();
383 }
384 
385 
TestTCPSetAddr(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)386 void TestTCPSetAddr(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
387 {
388     ScanDeviceInfoTCP scanDevInfoTcp;
389     std::string addr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
390     scanDevInfoTcp.SetAddr(addr);
391     addr = scanDevInfoTcp.GetAddr();
392 }
393 
TestTCPSetButton(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)394 void TestTCPSetButton(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
395 {
396     ScanDeviceInfoTCP scanDevInfoTcp;
397     std::string button = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
398     scanDevInfoTcp.SetButton(button);
399     button = scanDevInfoTcp.GetButton();
400 }
401 
TestTCPSetFeeder(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)402 void TestTCPSetFeeder(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
403 {
404     ScanDeviceInfoTCP scanDevInfoTcp;
405     std::string feeder = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
406     scanDevInfoTcp.SetFeeder(feeder);
407     feeder = scanDevInfoTcp.GetFeeder();
408 }
409 
TestTCPSetDeviceState(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)410 void TestTCPSetDeviceState(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
411 {
412     ScanDeviceInfoTCP scanDevInfoTcp;
413     uint32_t deviceState = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
414     scanDevInfoTcp.SetDeviceState(deviceState);
415     deviceState = scanDevInfoTcp.GetDeviceState();
416 }
417 
TestUSBSetDeviceId(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)418 void TestUSBSetDeviceId(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
419 {
420     ScanDeviceInfo deviceInfo;
421     std::string deviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
422     deviceInfo.SetDeviceId(deviceId);
423     deviceId = deviceInfo.GetDeviceId();
424 }
425 
TestUSBSetManufacturer(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)426 void TestUSBSetManufacturer(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
427 {
428     ScanDeviceInfo deviceInfo;
429     std::string manufacturer = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
430     deviceInfo.SetManufacturer(manufacturer);
431     manufacturer = deviceInfo.GetManufacturer();
432 }
433 
TestUSBSetModel(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)434 void TestUSBSetModel(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
435 {
436     ScanDeviceInfo deviceInfo;
437     std::string model = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
438     deviceInfo.SetModel(model);
439     model = deviceInfo.GetModel();
440 }
441 
TestUSBSetDeviceType(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)442 void TestUSBSetDeviceType(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
443 {
444     ScanDeviceInfo deviceInfo;
445     std::string deviceType = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
446     deviceInfo.SetDeviceType(deviceType);
447     deviceType = deviceInfo.GetDeviceType();
448 }
449 
TestUSBSetDeviceState(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)450 void TestUSBSetDeviceState(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
451 {
452     ScanDeviceInfo deviceInfo;
453     uint32_t deviceState = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
454     deviceInfo.SetDeviceState(deviceState);
455     deviceState = deviceInfo.GetDeviceState();
456 }
457 
TestUSBSetDiscoverMode(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)458 void TestUSBSetDiscoverMode(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
459 {
460     ScanDeviceInfo deviceInfo;
461     std::string discoverMode = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
462     deviceInfo.SetDiscoverMode(discoverMode);
463     discoverMode = deviceInfo.GetDiscoverMode();
464 }
465 
TestUSBSetSerialNumber(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)466 void TestUSBSetSerialNumber(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
467 {
468     ScanDeviceInfo deviceInfo;
469     std::string serialNumber = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
470     deviceInfo.SetSerialNumber(serialNumber);
471     serialNumber = deviceInfo.GetSerialNumber();
472 }
473 
TestSetMinValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)474 void TestSetMinValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
475 {
476     ScanRange range;
477     int32_t minValue = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
478     range.SetMinValue(minValue);
479     minValue = range.GetMinValue();
480 }
481 
TestSetMaxValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)482 void TestSetMaxValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
483 {
484     ScanRange range;
485     int32_t maxValue = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
486     range.SetMaxValue(maxValue);
487     maxValue = range.GetMaxValue();
488 }
489 
TestSetQuantValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)490 void TestSetQuantValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
491 {
492     ScanRange range;
493     int32_t quantValue = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
494     range.SetQuantValue(quantValue);
495     quantValue = range.GetQuantValue();
496 }
497 
TestScanRange(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)498 void TestScanRange(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
499 {
500     ScanRange range;
501     range.Reset();
502     int32_t maxValue = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
503     range.SetMaxValue(maxValue);
504     ScanRange rangeBak(range);
505     MessageParcel parcel;
506     range.Marshalling(parcel);
507     auto rangeMarshall = ScanRange::Unmarshalling(parcel);
508 }
509 
TestDeviceInfo(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)510 void TestDeviceInfo(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
511 {
512     ScanDeviceInfoTCP infoTcp;
513     uint32_t deviceState = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
514     infoTcp.SetDeviceState(deviceState);
515     ScanDeviceInfoTCP infoTcpTmp(infoTcp);
516     ScanDeviceInfoTCP infoTcpBak(infoTcpTmp);
517     MessageParcel parcel;
518     infoTcpBak.Marshalling(parcel);
519     auto infoTcpMarshall = ScanDeviceInfoTCP::Unmarshalling(parcel);
520 
521     ScanDeviceInfo info;
522     info.SetDeviceState(deviceState);
523     ScanDeviceInfo infoTmp(info);
524     ScanDeviceInfo infoBak(infoTmp);
525     infoBak.Marshalling(parcel);
526     auto infoMarshall = ScanDeviceInfo::Unmarshalling(parcel);
527 }
528 
TestScanOptDesNapiInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)529 void TestScanOptDesNapiInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
530 {
531     napi_env env = nullptr;
532     ScanOptionDescriptor info;
533     uint32_t optionUnit = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
534     info.SetOptionUnit(optionUnit);
535     ScanOptionDescriptorHelper::MakeJsObject(env, info);
536     napi_value jsValue = nullptr;
537     ScanOptionDescriptorHelper::BuildFromJs(env, jsValue);
538 }
539 
TestScanOptValNapiInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)540 void TestScanOptValNapiInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
541 {
542     napi_env env = nullptr;
543     ScanOptionValue info;
544     int32_t valueType = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
545     info.SetScanOptionValueType(static_cast<ScanOptionValueType>(valueType));
546     ScanOptionValueHelper::MakeJsObject(env, info);
547     napi_value jsValue = nullptr;
548     ScanOptionValueHelper::BuildFromJs(env, jsValue);
549 }
550 
TestScanParaNapiInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)551 void TestScanParaNapiInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
552 {
553     napi_env env = nullptr;
554     ScanParameters info;
555     int32_t format = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
556     info.SetFormat(static_cast<ScanFrame>(format));
557     ScanParametersHelper::MakeJsObject(env, info);
558     napi_value jsValue = nullptr;
559     ScanParametersHelper::BuildFromJs(env, jsValue);
560 }
561 
TestScanProgNapiInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)562 void TestScanProgNapiInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
563 {
564     napi_env env = nullptr;
565     ScanProgress info;
566     int32_t progress = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
567     info.SetScanProgress(progress);
568     ScanProgressHelper::MakeJsObject(env, info);
569 }
570 
TestScanRangeNapiInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)571 void TestScanRangeNapiInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
572 {
573     napi_env env = nullptr;
574     ScanRange info;
575     int32_t maxValue = dataProvider->ConsumeIntegralInRange<int32_t>(0, MAX_SET_NUMBER);
576     info.SetMaxValue(maxValue);
577     ScanRangeHelper::MakeJsObject(env, info);
578     napi_value jsValue = nullptr;
579     ScanRangeHelper::BuildFromJs(env, jsValue);
580 }
581 
TestScannerInfoNapiInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)582 void TestScannerInfoNapiInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
583 {
584     napi_env env = nullptr;
585     ScanDeviceInfo info;
586     std::string deviceId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
587     info.SetDeviceId(deviceId);
588     ScannerInfoHelper::MakeJsObject(env, info);
589 }
590 
TestScannerInfoTCPNapiInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)591 void TestScannerInfoTCPNapiInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
592 {
593     napi_env env = nullptr;
594     ScanDeviceInfoTCP info;
595     uint32_t deviceState = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
596     info.SetDeviceState(deviceState);
597     ScannerInfoHelperTCP::MakeJsObject(env, info);
598 }
599 
TestSetNamedProperty(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)600 void TestSetNamedProperty(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
601 {
602     napi_env env = nullptr;
603     napi_value object = nullptr;
604     std::string name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
605     napi_value value = nullptr;
606     NapiScanUtils::SetNamedProperty(env, object, name, value);
607 }
608 
TestGetUint32FromValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)609 void TestGetUint32FromValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
610 {
611     napi_env env = nullptr;
612     napi_value value = nullptr;
613     NapiScanUtils::GetUint32FromValue(env, value);
614 }
615 
TestGetInt32FromValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)616 void TestGetInt32FromValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
617 {
618     napi_env env = nullptr;
619     napi_value value = nullptr;
620     NapiScanUtils::GetInt32FromValue(env, value);
621 }
622 
TestGetStringFromValueUtf8(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)623 void TestGetStringFromValueUtf8(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
624 {
625     napi_env env = nullptr;
626     napi_value value = nullptr;
627     NapiScanUtils::GetStringFromValueUtf8(env, value);
628 }
629 
TestValueIsArrayBuffer(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)630 void TestValueIsArrayBuffer(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
631 {
632     napi_env env = nullptr;
633     napi_value value = nullptr;
634     NapiScanUtils::ValueIsArrayBuffer(env, value);
635 }
636 
TestGetInfoFromArrayBufferValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)637 void TestGetInfoFromArrayBufferValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
638 {
639     napi_env env = nullptr;
640     napi_value value = nullptr;
641     size_t *length = nullptr;
642     NapiScanUtils::GetInfoFromArrayBufferValue(env, value, length);
643 }
644 
TestCreateObject(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)645 void TestCreateObject(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
646 {
647     napi_env env = nullptr;
648     NapiScanUtils::CreateObject(env);
649 }
650 
TestGetUndefined(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)651 void TestGetUndefined(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
652 {
653     napi_env env = nullptr;
654     NapiScanUtils::GetUndefined(env);
655 }
656 
TestCallFunction(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)657 void TestCallFunction(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
658 {
659     napi_env env = nullptr;
660     napi_value recv = nullptr;
661     napi_value func = nullptr;
662     size_t argc = 0;
663     napi_value *argv = nullptr;
664     NapiScanUtils::CallFunction(env, recv, func, argc, argv);
665 }
666 
TestCreateReference(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)667 void TestCreateReference(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
668 {
669     napi_env env = nullptr;
670     napi_value callback = nullptr;
671     NapiScanUtils::CreateReference(env, callback);
672 }
673 
TestCreateBoolean(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)674 void TestCreateBoolean(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
675 {
676     napi_env env = nullptr;
677     bool value = 1;
678     NapiScanUtils::CreateBoolean(env, value);
679 }
680 
TestGetBooleanFromValue(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)681 void TestGetBooleanFromValue(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
682 {
683     napi_env env = nullptr;
684     napi_value value = nullptr;
685     NapiScanUtils::GetBooleanFromValue(env, value);
686 }
687 
TestGetBooleanProperty(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)688 void TestGetBooleanProperty(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
689 {
690     napi_env env = nullptr;
691     napi_value object = nullptr;
692     std::string propertyName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
693     NapiScanUtils::GetBooleanProperty(env, object, propertyName);
694 }
695 
TestSetBooleanProperty(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)696 void TestSetBooleanProperty(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
697 {
698     napi_env env = nullptr;
699     napi_value object = nullptr;
700     std::string name = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
701     bool value = 1;
702     NapiScanUtils::SetBooleanProperty(env, object, name, value);
703 }
704 
TestToLower(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)705 void TestToLower(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
706 {
707     std::string s = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
708     NapiScanUtils::ToLower(s);
709 }
710 
TestGetValueString(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)711 void TestGetValueString(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
712 {
713     napi_env env = nullptr;
714     napi_value jsValue = nullptr;
715     NapiScanUtils::GetValueString(env, jsValue);
716 }
717 
TestGetExtensionIdInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)718 void TestGetExtensionIdInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
719 {
720     std::string globalId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
721     NapiScanUtils::GetExtensionId(globalId);
722 }
723 
TestGetGlobalIdInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)724 void TestGetGlobalIdInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
725 {
726     std::string globalId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
727     std::string localId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
728     NapiScanUtils::GetGlobalId(globalId, localId);
729 }
730 
TestGetLocalIdInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)731 void TestGetLocalIdInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
732 {
733     std::string globalId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
734     std::string extensionId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
735     NapiScanUtils::GetLocalId(globalId, extensionId);
736 }
737 
TestEncodeExtensionCidInterface(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)738 void TestEncodeExtensionCidInterface(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
739 {
740     std::string globalId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
741     uint32_t callbackId = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
742     NapiScanUtils::EncodeExtensionCid(globalId, callbackId);
743 }
744 
TestDecodeExtensionCid(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)745 void TestDecodeExtensionCid(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
746 {
747     std::string cid = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
748     std::string extensionId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
749     uint32_t callbackId = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
750     NapiScanUtils::DecodeExtensionCid(cid, extensionId, callbackId);
751 }
752 
TestGetTaskEventId(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)753 void TestGetTaskEventId(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
754 {
755     std::string taskId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
756     std::string type = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
757     NapiScanUtils::GetTaskEventId(taskId, type);
758 }
759 
TestOpenFile(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)760 void TestOpenFile(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
761 {
762     std::string filePath = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
763     NapiScanUtils::OpenFile(filePath);
764 }
765 
TestIsPathValid(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)766 void TestIsPathValid(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
767 {
768     std::string filePath = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
769     NapiScanUtils::IsPathValid(filePath);
770 }
771 
TestGetJsVal(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)772 void TestGetJsVal(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
773 {
774     napi_env env = nullptr;
775     napi_callback_info info = nullptr;
776     napi_value* jsValue = nullptr;
777     size_t length = 1;
778     NapiScanUtils::GetJsVal(env, info, jsValue, length);
779 }
780 
ScanOptionDescriptorFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)781 void ScanOptionDescriptorFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
782 {
783     TestSetOptionName(data, size, dataProvider);
784     TestSetOptionTitle(data, size, dataProvider);
785     TestSetOptionDesc(data, size, dataProvider);
786     TestSetOptionType(data, size, dataProvider);
787     TestSetOptionUnit(data, size, dataProvider);
788     TestSetOptionSize(data, size, dataProvider);
789     TestSetOptionCap(data, size, dataProvider);
790     TestSetOptionConstraintType(data, size, dataProvider);
791     TestSetOptionConstraintString(data, size, dataProvider);
792     TestSetOptionConstraintNumber(data, size, dataProvider);
793     TestSetOptionConstraintRange(data, size, dataProvider);
794     TestScanOptionDescriptor(data, size, dataProvider);
795 }
796 
ScanOptionValueFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)797 void ScanOptionValueFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
798 {
799     TestSetScanOptionValueType(data, size, dataProvider);
800     TestSetValueSize(data, size, dataProvider);
801     TestSetNumValue(data, size, dataProvider);
802     TestSetNumListValue(data, size, dataProvider);
803     TestSetStrValue(data, size, dataProvider);
804     TestSetBoolValue(data, size, dataProvider);
805     TestScanOptionValue(data, size, dataProvider);
806 }
807 
ScanParametersFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)808 void ScanParametersFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
809 {
810     TestSetFormat(data, size, dataProvider);
811     TestSetLastFrame(data, size, dataProvider);
812     TestSetBytesPerLine(data, size, dataProvider);
813     TestSetPixelsPerLine(data, size, dataProvider);
814     TestSetLines(data, size, dataProvider);
815     TestSetDepth(data, size, dataProvider);
816     TestScanParameters(data, size, dataProvider);
817 }
818 
ScanDeviceInfoFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)819 void ScanDeviceInfoFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
820 {
821     TestSetScanProgress(data, size, dataProvider);
822     TestSetScanPictureFd(data, size, dataProvider);
823     TestSetIsFinal(data, size, dataProvider);
824     TestSetPictureId(data, size, dataProvider);
825     TestSetTaskCode(data, size, dataProvider);
826     TestScanProgress(data, size, dataProvider);
827 }
828 
ScannerInfoFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)829 void ScannerInfoFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
830 {
831     TestTCPSetDeviceName(data, size, dataProvider);
832     TestTCPSetUuid(data, size, dataProvider);
833     TestTCPSetModel(data, size, dataProvider);
834     TestTCPSetManufacturer(data, size, dataProvider);
835     TestTCPSetDeviceType(data, size, dataProvider);
836     TestTCPSetPort(data, size, dataProvider);
837     TestTCPSetAddr(data, size, dataProvider);
838     TestTCPSetButton(data, size, dataProvider);
839     TestTCPSetFeeder(data, size, dataProvider);
840     TestTCPSetDeviceState(data, size, dataProvider);
841     TestUSBSetDeviceId(data, size, dataProvider);
842     TestUSBSetManufacturer(data, size, dataProvider);
843     TestUSBSetModel(data, size, dataProvider);
844     TestUSBSetDeviceType(data, size, dataProvider);
845     TestUSBSetDeviceState(data, size, dataProvider);
846     TestUSBSetDiscoverMode(data, size, dataProvider);
847     TestUSBSetSerialNumber(data, size, dataProvider);
848     TestDeviceInfo(data, size, dataProvider);
849 }
850 
ScanRangeFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)851 void ScanRangeFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
852 {
853     TestSetMinValue(data, size, dataProvider);
854     TestSetMaxValue(data, size, dataProvider);
855     TestSetQuantValue(data, size, dataProvider);
856     TestScanRange(data, size, dataProvider);
857 }
858 
ScanOptionDescriptorHelperFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)859 void ScanOptionDescriptorHelperFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
860 {
861     TestScanOptDesNapiInterface(data, size, dataProvider);
862 }
863 
ScanOptionValueHelperFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)864 void ScanOptionValueHelperFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
865 {
866     TestScanOptValNapiInterface(data, size, dataProvider);
867 }
868 
ScanParametersHelperFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)869 void ScanParametersHelperFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
870 {
871     TestScanParaNapiInterface(data, size, dataProvider);
872 }
873 
ScanProgressHelperFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)874 void ScanProgressHelperFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
875 {
876     TestScanProgNapiInterface(data, size, dataProvider);
877 }
878 
ScanRangeHelperFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)879 void ScanRangeHelperFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
880 {
881     TestScanRangeNapiInterface(data, size, dataProvider);
882 }
883 
ScannerInfoHelperFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)884 void ScannerInfoHelperFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
885 {
886     TestScannerInfoNapiInterface(data, size, dataProvider);
887     TestScannerInfoTCPNapiInterface(data, size, dataProvider);
888 }
889 
NapiScanUtilsFuzzTest(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)890 void NapiScanUtilsFuzzTest(const uint8_t* data, size_t size, FuzzedDataProvider* dataProvider)
891 {
892     TestSetNamedProperty(data, size, dataProvider);
893     TestGetUint32FromValue(data, size, dataProvider);
894     TestGetInt32FromValue(data, size, dataProvider);
895     TestGetStringFromValueUtf8(data, size, dataProvider);
896     TestValueIsArrayBuffer(data, size, dataProvider);
897     TestGetInfoFromArrayBufferValue(data, size, dataProvider);
898     TestCreateObject(data, size, dataProvider);
899     TestGetUndefined(data, size, dataProvider);
900     TestCallFunction(data, size, dataProvider);
901     TestCreateReference(data, size, dataProvider);
902     TestCreateBoolean(data, size, dataProvider);
903     TestGetBooleanFromValue(data, size, dataProvider);
904     TestGetBooleanProperty(data, size, dataProvider);
905     TestSetBooleanProperty(data, size, dataProvider);
906     TestToLower(data, size, dataProvider);
907     TestGetValueString(data, size, dataProvider);
908     TestGetExtensionIdInterface(data, size, dataProvider);
909     TestGetGlobalIdInterface(data, size, dataProvider);
910     TestGetLocalIdInterface(data, size, dataProvider);
911     TestEncodeExtensionCidInterface(data, size, dataProvider);
912     TestDecodeExtensionCid(data, size, dataProvider);
913     TestGetTaskEventId(data, size, dataProvider);
914     TestOpenFile(data, size, dataProvider);
915     TestIsPathValid(data, size, dataProvider);
916     TestGetJsVal(data, size, dataProvider);
917 }
918 
919 }
920 }
921 
922 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)923 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
924 {
925     if (data == nullptr) {
926         return 0;
927     }
928 
929     if (size < OHOS::Scan::U32_AT_SIZE || size > OHOS::Scan::FOO_MAX_LEN) {
930         return 0;
931     }
932     FuzzedDataProvider dataProvider(data, size);
933     OHOS::Scan::ScanOptionDescriptorFuzzTest(data, size, &dataProvider);
934     OHOS::Scan::ScanOptionValueFuzzTest(data, size, &dataProvider);
935     OHOS::Scan::ScanParametersFuzzTest(data, size, &dataProvider);
936     OHOS::Scan::ScanDeviceInfoFuzzTest(data, size, &dataProvider);
937     OHOS::Scan::ScannerInfoFuzzTest(data, size, &dataProvider);
938     OHOS::Scan::ScanRangeFuzzTest(data, size, &dataProvider);
939     OHOS::Scan::ScanOptionDescriptorHelperFuzzTest(data, size, &dataProvider);
940     OHOS::Scan::ScanOptionValueHelperFuzzTest(data, size, &dataProvider);
941     OHOS::Scan::ScanParametersHelperFuzzTest(data, size, &dataProvider);
942     OHOS::Scan::ScanProgressHelperFuzzTest(data, size, &dataProvider);
943     OHOS::Scan::ScanRangeHelperFuzzTest(data, size, &dataProvider);
944     OHOS::Scan::ScannerInfoHelperFuzzTest(data, size, &dataProvider);
945     OHOS::Scan::NapiScanUtilsFuzzTest(data, size, &dataProvider);
946     return 0;
947 }
948 
949