• 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 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