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