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 #define private public
16 #define protected public
17 #include "printcupsclient_fuzzer.h"
18 #include "fuzzer/FuzzedDataProvider.h"
19 #include "print_constant.h"
20 #include "printer_capability.h"
21 #include "print_log.h"
22 #include "print_cups_client.h"
23
24 namespace OHOS {
25 namespace Print {
26 constexpr uint8_t MAX_STRING_LENGTH = 255;
27 constexpr int MAX_SET_NUMBER = 100;
28 constexpr int POLICY_ENUM_MAX = 3;
29 constexpr size_t FOO_MAX_LEN = 1024;
30 constexpr size_t U32_AT_SIZE = 4;
31
TestQueryPPDInformation(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)32 void TestQueryPPDInformation(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
33 {
34 PrintCupsClient::GetInstance()->InitCupsResources();
35 std::string makeModelStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
36 std::string ppd = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
37 std::vector<std::string> ppds;
38 ppds.push_back(ppd);
39 PrintCupsClient::GetInstance()->QueryPPDInformation(makeModelStr.c_str(), ppds);
40 PrintCupsClient::GetInstance()->StopCupsdService();
41 }
42
TestAddPrinterToCups(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)43 void TestAddPrinterToCups(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
44 {
45 PrintCupsClient::GetInstance()->InitCupsResources();
46 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
47 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
48 std::string printerMake = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
49 PrintCupsClient::GetInstance()->AddPrinterToCups(printerUri, printerName, printerMake);
50 PrintCupsClient::GetInstance()->JobSentCallback();
51 }
52
TestQueryPrinterAttributesByUri(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)53 void TestQueryPrinterAttributesByUri(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
54 {
55 PrintCupsClient::GetInstance()->InitCupsResources();
56 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
57 std::string nic = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
58 int num = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
59 std::string pattrs = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
60 char **pattrsArray = new char *[1];
61 pattrsArray[0] = new char[pattrs.length() + 1];
62 if (strcpy_s(pattrsArray[0], MAX_SET_NUMBER, pattrs.c_str()) != EOK) {
63 delete[] pattrsArray[0];
64 delete[] pattrsArray;
65 return;
66 }
67 PrintCupsClient::GetInstance()->QueryPrinterAttributesByUri(printerUri, nic, num, pattrsArray);
68 delete[] pattrsArray[0];
69 delete[] pattrsArray;
70 }
71
TestQueryPrinterCapabilityByUri(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)72 void TestQueryPrinterCapabilityByUri(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
73 {
74 PrintCupsClient::GetInstance()->InitCupsResources();
75 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
76 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
77 PrinterCapability printerCaps;
78 PrintCupsClient::GetInstance()->QueryPrinterCapabilityByUri(printerUri, printerName, printerCaps);
79 }
80
TestQueryPrinterStatusByUri(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)81 void TestQueryPrinterStatusByUri(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
82 {
83 PrintCupsClient::GetInstance()->InitCupsResources();
84 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
85 PrinterStatus status = PRINTER_STATUS_UNAVAILABLE;
86 PrintCupsClient::GetInstance()->QueryPrinterStatusByUri(printerUri, status);
87 }
88
TestDeleteCupsPrinter(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)89 void TestDeleteCupsPrinter(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
90 {
91 PrintCupsClient::GetInstance()->InitCupsResources();
92 std::string printerNameStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
93 PrintCupsClient::GetInstance()->DeleteCupsPrinter(printerNameStr.c_str());
94 }
95
TestAddCupsPrintJob(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)96 void TestAddCupsPrintJob(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
97 {
98 PrintCupsClient::GetInstance()->InitCupsResources();
99 PrintJob jobInfo;
100 std::string option = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
101 jobInfo.SetOption(option);
102 PrintCupsClient::GetInstance()->AddCupsPrintJob(jobInfo);
103 }
104
TestCancelCupsJob(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)105 void TestCancelCupsJob(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
106 {
107 PrintCupsClient::GetInstance()->InitCupsResources();
108 std::string serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
109 PrintCupsClient::GetInstance()->CancelCupsJob(serviceJobId);
110 }
111
TestQueryAddedPrinterList(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)112 void TestQueryAddedPrinterList(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
113 {
114 PrintCupsClient::GetInstance()->InitCupsResources();
115 std::string printerNameStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
116 std::vector<std::string> printerName;
117 printerName.push_back(printerNameStr);
118 PrintCupsClient::GetInstance()->QueryAddedPrinterList(printerName);
119 }
120
TestGetPPDFile(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)121 void TestGetPPDFile(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
122 {
123 PrintCupsClient::GetInstance()->InitCupsResources();
124 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
125 PrintCupsClient::GetInstance()->GetPPDFile(printerName);
126 }
127
TestSetDefaultPrinter(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)128 void TestSetDefaultPrinter(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
129 {
130 PrintCupsClient::GetInstance()->InitCupsResources();
131 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
132 PrintCupsClient::GetInstance()->SetDefaultPrinter(printerName);
133 }
134
TestQueryPrinterAttrList(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)135 void TestQueryPrinterAttrList(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
136 {
137 PrintCupsClient::GetInstance()->InitCupsResources();
138 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
139 std::string key = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
140 std::vector<std::string> keyList;
141 keyList.push_back(key);
142 std::string value = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
143 std::vector<std::string> valueList;
144 valueList.push_back(value);
145 PrintCupsClient::GetInstance()->QueryPrinterAttrList(printerName, keyList, valueList);
146 }
147
TestQueryPrinterInfoByPrinterId(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)148 void TestQueryPrinterInfoByPrinterId(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
149 {
150 PrintCupsClient::GetInstance()->InitCupsResources();
151 std::string printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
152 PrinterInfo info;
153 PrintCupsClient::GetInstance()->QueryPrinterInfoByPrinterId(printerId, info);
154 }
155
TestCheckPrinterMakeModel(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)156 void TestCheckPrinterMakeModel(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
157 {
158 PrintCupsClient::GetInstance()->InitCupsResources();
159 JobParameters jobParams;
160 jobParams.printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
161 PrintCupsClient::GetInstance()->CheckPrinterMakeModel(&jobParams);
162 }
163
TestDeletePrinterFromCups(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)164 void TestDeletePrinterFromCups(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
165 {
166 PrintCupsClient::GetInstance()->InitCupsResources();
167 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
168 PrintCupsClient::GetInstance()->DeleteCupsPrinter(printerName.c_str());
169 }
170
TestCheckPrinterOnline(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)171 void TestCheckPrinterOnline(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
172 {
173 auto monitorParams = std::make_shared<JobMonitorParam>();
174 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
175 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
176 PrintCupsClient::GetInstance()->CheckPrinterOnline(monitorParams);
177 }
178
TestGetIpAddress(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)179 void TestGetIpAddress(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
180 {
181 unsigned int number = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
182 PrintCupsClient::GetInstance()->GetIpAddress(number);
183 }
184
TestIsIpConflict(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)185 void TestIsIpConflict(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
186 {
187 std::string printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
188 std::string nic = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
189 PrintCupsClient::GetInstance()->IsIpConflict(printerId, nic);
190 }
191
TestConvertInchTo100MM(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)192 void TestConvertInchTo100MM(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
193 {
194 int num = dataProvider->ConsumeIntegralInRange<int>(0, MAX_SET_NUMBER);
195 PrintCupsClient::GetInstance()->ConvertInchTo100MM(num);
196 }
197
TestGetColorString(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)198 void TestGetColorString(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
199 {
200 uint32_t colorCode = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
201 PrintCupsClient::GetInstance()->GetColorString(colorCode);
202 }
203
TestGetDulpexString(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)204 void TestGetDulpexString(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
205 {
206 uint32_t duplexCode = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
207 PrintCupsClient::GetInstance()->GetDulpexString(duplexCode);
208 }
209
TestGetMedieSize(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)210 void TestGetMedieSize(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
211 {
212 PrintJob printJob;
213 printJob.SetJobId(dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH));
214 printJob.SetPrinterId(dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH));
215 PrintCupsClient::GetInstance()->GetMedieSize(printJob);
216 }
217
TestDumpJobParameters(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)218 void TestDumpJobParameters(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
219 {
220 JobParameters jobParams;
221 jobParams.serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
222 PrintCupsClient::GetInstance()->DumpJobParameters(&jobParams);
223 }
224
TestBuildJobParameters(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)225 void TestBuildJobParameters(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
226 {
227 PrintJob printJob;
228 printJob.SetJobId(dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH));
229 printJob.SetPrinterId(dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH));
230 printJob.SetOption(dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH));
231 PrintCupsClient::GetInstance()->BuildJobParameters(printJob);
232 }
233
TestCheckPrinterDriverExist(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)234 void TestCheckPrinterDriverExist(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
235 {
236 std::string makeModel = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
237 PrintCupsClient::GetInstance()->CheckPrinterDriverExist(makeModel.c_str());
238 }
239
TestStartMonitor(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)240 void TestStartMonitor(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
241 {
242 auto monitorParams = std::make_shared<JobMonitorParam>();
243 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
244 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
245 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
246 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
247 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
248 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
249 PrintCupsClient::GetInstance()->StartMonitor();
250 }
251
TestJobStatusCallback(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)252 void TestJobStatusCallback(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
253 {
254 auto monitorParams = std::make_shared<JobMonitorParam>();
255 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
256 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
257 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
258 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
259 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
260 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
261 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
262 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
263 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
264 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
265 PrintCupsClient::GetInstance()->JobStatusCallback(monitorParams);
266 }
267
TestIfContinueToHandleJobState(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)268 void TestIfContinueToHandleJobState(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
269 {
270 auto monitorParams = std::make_shared<JobMonitorParam>();
271 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
272 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
273 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
274 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
275 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
276 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
277 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
278 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
279 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
280 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
281 PrintCupsClient::GetInstance()->IfContinueToHandleJobState(monitorParams);
282 }
283
TestQueryJobState(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)284 void TestQueryJobState(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
285 {
286 auto monitorParams = std::make_shared<JobMonitorParam>();
287 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
288 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
289 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
290 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
291 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
292 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
293 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
294 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
295 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
296 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
297 PrintCupsClient::GetInstance()->QueryJobState(monitorParams->http, monitorParams);
298 }
299
TestIsPrinterStopped(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)300 void TestIsPrinterStopped(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
301 {
302 auto monitorParams = std::make_shared<JobMonitorParam>();
303 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
304 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
305 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
306 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
307 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
308 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
309 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
310 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
311 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
312 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
313 PrintCupsClient::GetInstance()->IsPrinterStopped(monitorParams);
314 }
315
TestBuildMonitorPolicy(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)316 void TestBuildMonitorPolicy(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
317 {
318 auto monitorParams = std::make_shared<JobMonitorParam>();
319 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
320 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
321 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
322 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
323 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
324 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
325 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
326 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
327 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
328 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
329 PrintCupsClient::GetInstance()->BuildMonitorPolicy(monitorParams);
330 }
331
TestParseStateReasons(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)332 void TestParseStateReasons(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
333 {
334 auto monitorParams = std::make_shared<JobMonitorParam>();
335 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
336 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
337 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
338 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
339 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
340 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
341 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
342 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
343 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
344 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
345 PrintCupsClient::GetInstance()->ParseStateReasons(monitorParams);
346 }
347
TestGetBlockedAndUpdateSubstate(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)348 void TestGetBlockedAndUpdateSubstate(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
349 {
350 auto monitorParams = std::make_shared<JobMonitorParam>();
351 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
352 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
353 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
354 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
355 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
356 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
357 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
358 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
359 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
360 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
361 StatePolicy policy = (StatePolicy)dataProvider->ConsumeIntegralInRange<unsigned int>(0, POLICY_ENUM_MAX);
362 std::string substateString = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
363 PrintJobSubState jobSubstate = (PrintJobSubState)dataProvider->
364 ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
365 PrintCupsClient::GetInstance()->GetBlockedAndUpdateSubstate(monitorParams, policy, substateString, jobSubstate);
366 }
367
TestGetNewSubstate(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)368 void TestGetNewSubstate(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
369 {
370 uint32_t substate = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
371 PrintJobSubState singleSubstate = (PrintJobSubState)dataProvider->
372 ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
373 PrintCupsClient::GetInstance()->GetNewSubstate(substate, singleSubstate);
374 }
375
376 } // namespace Print
377 } // namespace OHOS
378
379 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)380 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
381 {
382 /* Run your code on data */
383 if (data == nullptr) {
384 return 0;
385 }
386
387 if (size < OHOS::Print::U32_AT_SIZE || size > OHOS::Print::FOO_MAX_LEN) {
388 }
389
390 FuzzedDataProvider dataProvider(data, size);
391 OHOS::Print::TestQueryPPDInformation(data, size, &dataProvider);
392 OHOS::Print::TestAddPrinterToCups(data, size, &dataProvider);
393 OHOS::Print::TestQueryPrinterAttributesByUri(data, size, &dataProvider);
394 OHOS::Print::TestQueryPrinterCapabilityByUri(data, size, &dataProvider);
395 OHOS::Print::TestQueryPrinterStatusByUri(data, size, &dataProvider);
396 OHOS::Print::TestDeleteCupsPrinter(data, size, &dataProvider);
397 OHOS::Print::TestAddCupsPrintJob(data, size, &dataProvider);
398 OHOS::Print::TestCancelCupsJob(data, size, &dataProvider);
399 OHOS::Print::TestQueryAddedPrinterList(data, size, &dataProvider);
400 OHOS::Print::TestGetPPDFile(data, size, &dataProvider);
401 OHOS::Print::TestSetDefaultPrinter(data, size, &dataProvider);
402 OHOS::Print::TestQueryPrinterAttrList(data, size, &dataProvider);
403 OHOS::Print::TestQueryPrinterInfoByPrinterId(data, size, &dataProvider);
404 OHOS::Print::TestCheckPrinterMakeModel(data, size, &dataProvider);
405 OHOS::Print::TestDeletePrinterFromCups(data, size, &dataProvider);
406 OHOS::Print::TestCheckPrinterOnline(data, size, &dataProvider);
407 OHOS::Print::TestGetIpAddress(data, size, &dataProvider);
408 OHOS::Print::TestIsIpConflict(data, size, &dataProvider);
409 OHOS::Print::TestConvertInchTo100MM(data, size, &dataProvider);
410 OHOS::Print::TestGetColorString(data, size, &dataProvider);
411 OHOS::Print::TestGetDulpexString(data, size, &dataProvider);
412 OHOS::Print::TestGetMedieSize(data, size, &dataProvider);
413 OHOS::Print::TestDumpJobParameters(data, size, &dataProvider);
414 OHOS::Print::TestBuildJobParameters(data, size, &dataProvider);
415 OHOS::Print::TestCheckPrinterDriverExist(data, size, &dataProvider);
416 OHOS::Print::TestStartMonitor(data, size, &dataProvider);
417 OHOS::Print::TestJobStatusCallback(data, size, &dataProvider);
418 OHOS::Print::TestIfContinueToHandleJobState(data, size, &dataProvider);
419 OHOS::Print::TestQueryJobState(data, size, &dataProvider);
420 OHOS::Print::TestIsPrinterStopped(data, size, &dataProvider);
421 OHOS::Print::TestBuildMonitorPolicy(data, size, &dataProvider);
422 OHOS::Print::TestParseStateReasons(data, size, &dataProvider);
423 OHOS::Print::TestGetBlockedAndUpdateSubstate(data, size, &dataProvider);
424 OHOS::Print::TestGetNewSubstate(data, size, &dataProvider);
425
426 return 0;
427 }
428