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 makeModel = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
36 std::string ppd = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
37 PrintCupsClient::GetInstance()->QueryPPDInformation(makeModel, ppd);
38 PrintCupsClient::GetInstance()->StopCupsdService();
39 }
40
TestAddPrinterToCups(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)41 void TestAddPrinterToCups(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
42 {
43 PrintCupsClient::GetInstance()->InitCupsResources();
44 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
45 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
46 std::string printerMake = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
47 PrintCupsClient::GetInstance()->AddPrinterToCups(printerUri, printerName, printerMake);
48 PrintCupsClient::GetInstance()->JobSentCallback();
49 }
50
TestQueryPrinterAttributesByUri(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)51 void TestQueryPrinterAttributesByUri(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
52 {
53 PrintCupsClient::GetInstance()->InitCupsResources();
54 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
55 std::string nic = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
56 int num = dataProvider->ConsumeIntegralInRange<uint32_t>(0, MAX_SET_NUMBER);
57 std::string pattrs = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
58 char **pattrsArray = new char *[1];
59 pattrsArray[0] = new char[pattrs.length() + 1];
60 if (strcpy_s(pattrsArray[0], MAX_SET_NUMBER, pattrs.c_str()) != EOK) {
61 delete[] pattrsArray[0];
62 delete[] pattrsArray;
63 return;
64 }
65 PrintCupsClient::GetInstance()->QueryPrinterAttributesByUri(printerUri, nic, num, pattrsArray);
66 delete[] pattrsArray[0];
67 delete[] pattrsArray;
68 }
69
TestQueryPrinterCapabilityByUri(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)70 void TestQueryPrinterCapabilityByUri(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
71 {
72 PrintCupsClient::GetInstance()->InitCupsResources();
73 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
74 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
75 PrinterCapability printerCaps;
76 PrintCupsClient::GetInstance()->QueryPrinterCapabilityByUri(printerUri, printerName, printerCaps);
77 }
78
TestQueryPrinterStatusByUri(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)79 void TestQueryPrinterStatusByUri(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
80 {
81 PrintCupsClient::GetInstance()->InitCupsResources();
82 std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
83 PrinterStatus status = PRINTER_STATUS_UNAVAILABLE;
84 PrintCupsClient::GetInstance()->QueryPrinterStatusByUri(printerUri, status);
85 }
86
TestDeleteCupsPrinter(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)87 void TestDeleteCupsPrinter(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
88 {
89 PrintCupsClient::GetInstance()->InitCupsResources();
90 std::string printerNameStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
91 PrintCupsClient::GetInstance()->DeleteCupsPrinter(printerNameStr.c_str());
92 }
93
TestAddCupsPrintJob(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)94 void TestAddCupsPrintJob(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
95 {
96 PrintCupsClient::GetInstance()->InitCupsResources();
97 PrintJob jobInfo;
98 std::string option = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
99 jobInfo.SetOption(option);
100 std::string userName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
101 PrintCupsClient::GetInstance()->AddCupsPrintJob(jobInfo, userName);
102 }
103
TestCancelCupsJob(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)104 void TestCancelCupsJob(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
105 {
106 PrintCupsClient::GetInstance()->InitCupsResources();
107 std::string serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
108 PrintCupsClient::GetInstance()->CancelCupsJob(serviceJobId);
109 }
110
TestQueryAddedPrinterList(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)111 void TestQueryAddedPrinterList(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
112 {
113 PrintCupsClient::GetInstance()->InitCupsResources();
114 std::string printerNameStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
115 std::vector<std::string> printerName;
116 printerName.push_back(printerNameStr);
117 PrintCupsClient::GetInstance()->QueryAddedPrinterList(printerName);
118 }
119
TestGetPPDFile(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)120 void TestGetPPDFile(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
121 {
122 PrintCupsClient::GetInstance()->InitCupsResources();
123 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
124 PrintCupsClient::GetInstance()->GetPPDFile(printerName);
125 }
126
TestSetDefaultPrinter(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)127 void TestSetDefaultPrinter(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
128 {
129 PrintCupsClient::GetInstance()->InitCupsResources();
130 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
131 PrintCupsClient::GetInstance()->SetDefaultPrinter(printerName);
132 }
133
TestQueryPrinterAttrList(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)134 void TestQueryPrinterAttrList(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
135 {
136 PrintCupsClient::GetInstance()->InitCupsResources();
137 std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
138 std::string key = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
139 std::vector<std::string> keyList;
140 keyList.push_back(key);
141 std::string value = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
142 std::vector<std::string> valueList;
143 valueList.push_back(value);
144 PrintCupsClient::GetInstance()->QueryPrinterAttrList(printerName, keyList, valueList);
145 }
146
TestQueryPrinterInfoByPrinterId(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)147 void TestQueryPrinterInfoByPrinterId(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
148 {
149 PrintCupsClient::GetInstance()->InitCupsResources();
150 std::string printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
151 PrinterInfo info;
152 PrintCupsClient::GetInstance()->QueryPrinterInfoByPrinterId(printerId, info);
153 }
154
TestCheckPrinterMakeModel(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)155 void TestCheckPrinterMakeModel(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
156 {
157 PrintCupsClient::GetInstance()->InitCupsResources();
158 JobParameters jobParams;
159 jobParams.printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
160 bool driverMissing = false;
161 PrintCupsClient::GetInstance()->CheckPrinterMakeModel(&jobParams, driverMissing);
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 std::string userName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
232 PrintCupsClient::GetInstance()->BuildJobParameters(printJob, userName);
233 }
234
TestCheckPrinterDriverExist(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)235 void TestCheckPrinterDriverExist(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
236 {
237 std::string makeModel = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
238 PrintCupsClient::GetInstance()->CheckPrinterDriverExist(makeModel);
239 }
240
TestStartMonitor(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)241 void TestStartMonitor(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
242 {
243 auto monitorParams = std::make_shared<JobMonitorParam>();
244 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
245 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
246 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
247 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
248 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
249 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
250 PrintCupsClient::GetInstance()->StartMonitor();
251 }
252
TestJobStatusCallback(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)253 void TestJobStatusCallback(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
254 {
255 auto monitorParams = std::make_shared<JobMonitorParam>();
256 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
257 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
258 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
259 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
260 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
261 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
262 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
263 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
264 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
265 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
266 PrintCupsClient::GetInstance()->JobStatusCallback(monitorParams);
267 }
268
TestIfContinueToHandleJobState(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)269 void TestIfContinueToHandleJobState(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
270 {
271 auto monitorParams = std::make_shared<JobMonitorParam>();
272 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
273 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
274 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
275 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
276 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
277 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
278 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
279 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
280 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
281 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
282 PrintCupsClient::GetInstance()->IfContinueToHandleJobState(monitorParams);
283 }
284
TestQueryJobState(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)285 void TestQueryJobState(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
286 {
287 auto monitorParams = std::make_shared<JobMonitorParam>();
288 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
289 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
290 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
291 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
292 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
293 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
294 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
295 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
296 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
297 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
298 PrintCupsClient::GetInstance()->QueryJobState(monitorParams->http, monitorParams);
299 }
300
TestIsPrinterStopped(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)301 void TestIsPrinterStopped(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
302 {
303 auto monitorParams = std::make_shared<JobMonitorParam>();
304 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
305 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
306 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
307 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
308 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
309 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
310 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
311 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
312 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
313 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
314 PrintCupsClient::GetInstance()->IsPrinterStopped(monitorParams);
315 }
316
TestBuildMonitorPolicy(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)317 void TestBuildMonitorPolicy(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
318 {
319 auto monitorParams = std::make_shared<JobMonitorParam>();
320 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
321 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
322 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
323 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
324 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
325 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
326 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
327 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
328 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
329 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
330 PrintCupsClient::GetInstance()->BuildMonitorPolicy(monitorParams);
331 }
332
TestParseStateReasons(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)333 void TestParseStateReasons(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
334 {
335 auto monitorParams = std::make_shared<JobMonitorParam>();
336 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
337 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
338 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
339 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
340 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
341 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
342 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
343 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
344 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
345 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
346 PrintCupsClient::GetInstance()->ParseStateReasons(monitorParams);
347 }
348
TestGetBlockedAndUpdateSubstate(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)349 void TestGetBlockedAndUpdateSubstate(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
350 {
351 auto monitorParams = std::make_shared<JobMonitorParam>();
352 monitorParams->serviceAbility = PrintServiceAbility::GetInstance();
353 monitorParams->serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
354 monitorParams->cupsJobId = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
355 monitorParams->printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
356 monitorParams->printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
357 monitorParams->printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
358 std::string job_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
359 job_state_reasons.copy(monitorParams->job_state_reasons, job_state_reasons.length() + 1);
360 std::string job_printer_state_reasons = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
361 job_printer_state_reasons.copy(monitorParams->job_printer_state_reasons, job_printer_state_reasons.length() + 1);
362 StatePolicy policy = (StatePolicy)dataProvider->ConsumeIntegralInRange<unsigned int>(0, POLICY_ENUM_MAX);
363 std::string substateString = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
364 PrintJobSubState jobSubstate = (PrintJobSubState)dataProvider->
365 ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
366 PrintCupsClient::GetInstance()->GetBlockedAndUpdateSubstate(monitorParams, policy, substateString, jobSubstate);
367 }
368
TestGetNewSubstate(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)369 void TestGetNewSubstate(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
370 {
371 uint32_t substate = dataProvider->ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
372 PrintJobSubState singleSubstate = (PrintJobSubState)dataProvider->
373 ConsumeIntegralInRange<unsigned int>(0, MAX_SET_NUMBER);
374 PrintCupsClient::GetInstance()->GetNewSubstate(substate, singleSubstate);
375 }
376
377 } // namespace Print
378 } // namespace OHOS
379
380 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)381 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
382 {
383 /* Run your code on data */
384 if (data == nullptr) {
385 return 0;
386 }
387
388 if (size < OHOS::Print::U32_AT_SIZE || size > OHOS::Print::FOO_MAX_LEN) {
389 }
390
391 FuzzedDataProvider dataProvider(data, size);
392 OHOS::Print::TestQueryPPDInformation(data, size, &dataProvider);
393 OHOS::Print::TestAddPrinterToCups(data, size, &dataProvider);
394 OHOS::Print::TestQueryPrinterAttributesByUri(data, size, &dataProvider);
395 OHOS::Print::TestQueryPrinterCapabilityByUri(data, size, &dataProvider);
396 OHOS::Print::TestQueryPrinterStatusByUri(data, size, &dataProvider);
397 OHOS::Print::TestDeleteCupsPrinter(data, size, &dataProvider);
398 OHOS::Print::TestAddCupsPrintJob(data, size, &dataProvider);
399 OHOS::Print::TestCancelCupsJob(data, size, &dataProvider);
400 OHOS::Print::TestQueryAddedPrinterList(data, size, &dataProvider);
401 OHOS::Print::TestGetPPDFile(data, size, &dataProvider);
402 OHOS::Print::TestSetDefaultPrinter(data, size, &dataProvider);
403 OHOS::Print::TestQueryPrinterAttrList(data, size, &dataProvider);
404 OHOS::Print::TestQueryPrinterInfoByPrinterId(data, size, &dataProvider);
405 OHOS::Print::TestCheckPrinterMakeModel(data, size, &dataProvider);
406 OHOS::Print::TestDeletePrinterFromCups(data, size, &dataProvider);
407 OHOS::Print::TestCheckPrinterOnline(data, size, &dataProvider);
408 OHOS::Print::TestGetIpAddress(data, size, &dataProvider);
409 OHOS::Print::TestIsIpConflict(data, size, &dataProvider);
410 OHOS::Print::TestConvertInchTo100MM(data, size, &dataProvider);
411 OHOS::Print::TestGetColorString(data, size, &dataProvider);
412 OHOS::Print::TestGetDulpexString(data, size, &dataProvider);
413 OHOS::Print::TestGetMedieSize(data, size, &dataProvider);
414 OHOS::Print::TestDumpJobParameters(data, size, &dataProvider);
415 OHOS::Print::TestBuildJobParameters(data, size, &dataProvider);
416 OHOS::Print::TestCheckPrinterDriverExist(data, size, &dataProvider);
417 OHOS::Print::TestStartMonitor(data, size, &dataProvider);
418 OHOS::Print::TestJobStatusCallback(data, size, &dataProvider);
419 OHOS::Print::TestIfContinueToHandleJobState(data, size, &dataProvider);
420 OHOS::Print::TestQueryJobState(data, size, &dataProvider);
421 OHOS::Print::TestIsPrinterStopped(data, size, &dataProvider);
422 OHOS::Print::TestBuildMonitorPolicy(data, size, &dataProvider);
423 OHOS::Print::TestParseStateReasons(data, size, &dataProvider);
424 OHOS::Print::TestGetBlockedAndUpdateSubstate(data, size, &dataProvider);
425 OHOS::Print::TestGetNewSubstate(data, size, &dataProvider);
426
427 return 0;
428 }
429