• 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 size_t FOO_MAX_LEN = 1024;
28 constexpr size_t U32_AT_SIZE = 4;
29 
TestInitCupsResources(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)30 void TestInitCupsResources(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
31 {
32     PrintCupsClient::GetInstance()->InitCupsResources();
33 }
34 
TestStopCupsdService(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)35 void TestStopCupsdService(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
36 {
37     PrintCupsClient::GetInstance()->InitCupsResources();
38     PrintCupsClient::GetInstance()->StopCupsdService();
39 }
40 
TestQueryPPDInformation(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)41 void TestQueryPPDInformation(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
42 {
43     PrintCupsClient::GetInstance()->InitCupsResources();
44     std::string makeModelStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
45     std::string ppd = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
46     std::vector<std::string> ppds;
47     ppds.push_back(ppd);
48     PrintCupsClient::GetInstance()->QueryPPDInformation(makeModelStr.c_str(), ppds);
49 }
50 
TestAddPrinterToCups(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)51 void TestAddPrinterToCups(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 printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
56     std::string printerMake = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
57     PrintCupsClient::GetInstance()->AddPrinterToCups(printerUri, printerName, printerMake);
58 }
59 
TestQueryPrinterCapabilityByUri(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)60 void TestQueryPrinterCapabilityByUri(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
61 {
62     PrintCupsClient::GetInstance()->InitCupsResources();
63     std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
64     std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
65     PrinterCapability printerCaps;
66     PrintCupsClient::GetInstance()->QueryPrinterCapabilityByUri(printerUri, printerName, printerCaps);
67 }
68 
TestDeleteCupsPrinter(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)69 void TestDeleteCupsPrinter(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
70 {
71     PrintCupsClient::GetInstance()->InitCupsResources();
72     std::string printerNameStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
73     PrintCupsClient::GetInstance()->DeleteCupsPrinter(printerNameStr.c_str());
74 }
75 
TestAddCupsPrintJob(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)76 void TestAddCupsPrintJob(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
77 {
78     PrintCupsClient::GetInstance()->InitCupsResources();
79     PrintJob jobInfo;
80     PrintCupsClient::GetInstance()->AddCupsPrintJob(jobInfo);
81 }
82 
TestCancelCupsJob(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)83 void TestCancelCupsJob(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
84 {
85     PrintCupsClient::GetInstance()->InitCupsResources();
86     std::string serviceJobId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
87     PrintCupsClient::GetInstance()->CancelCupsJob(serviceJobId);
88 }
89 
TestQueryAddedPrinterList(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)90 void TestQueryAddedPrinterList(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
91 {
92     PrintCupsClient::GetInstance()->InitCupsResources();
93     std::string printerNameStr = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
94     std::vector<std::string> printerName;
95     printerName.push_back(printerNameStr);
96     PrintCupsClient::GetInstance()->QueryAddedPrinterList(printerName);
97 }
98 
TestGetPPDFile(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)99 void TestGetPPDFile(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
100 {
101     PrintCupsClient::GetInstance()->InitCupsResources();
102     std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
103     PrintCupsClient::GetInstance()->GetPPDFile(printerName);
104 }
105 
TestSetDefaultPrinter(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)106 void TestSetDefaultPrinter(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
107 {
108     PrintCupsClient::GetInstance()->InitCupsResources();
109     std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
110     PrintCupsClient::GetInstance()->SetDefaultPrinter(printerName);
111 }
112 
TestQueryPrinterAttrList(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)113 void TestQueryPrinterAttrList(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
114 {
115     PrintCupsClient::GetInstance()->InitCupsResources();
116     std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
117     std::string key = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
118     std::vector<std::string> keyList;
119     keyList.push_back(key);
120     std::string value = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
121     std::vector<std::string> valueList;
122     valueList.push_back(value);
123     PrintCupsClient::GetInstance()->QueryPrinterAttrList(printerName, keyList, valueList);
124 }
125 
TestQueryPrinterInfoByPrinterId(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)126 void TestQueryPrinterInfoByPrinterId(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
127 {
128     PrintCupsClient::GetInstance()->InitCupsResources();
129     std::string printerId = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
130     PrinterInfo info;
131     PrintCupsClient::GetInstance()->QueryPrinterInfoByPrinterId(printerId, info);
132 }
133 
TestJobCompleteCallback(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)134 void TestJobCompleteCallback(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
135 {
136     PrintCupsClient::GetInstance()->InitCupsResources();
137     PrintCupsClient::GetInstance()->JobCompleteCallback();
138 }
139 
TestCheckPrinterMakeModel(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)140 void TestCheckPrinterMakeModel(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
141 {
142     PrintCupsClient::GetInstance()->InitCupsResources();
143     JobParameters jobParams;
144     PrintCupsClient::CheckPrinterMakeModel(&jobParams);
145 }
146 
TestDeletePrinterFromCups(const uint8_t * data,size_t size,FuzzedDataProvider * dataProvider)147 void TestDeletePrinterFromCups(const uint8_t *data, size_t size, FuzzedDataProvider *dataProvider)
148 {
149     PrintCupsClient::GetInstance()->InitCupsResources();
150     std::string printerUri = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
151     std::string printerName = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
152     std::string printerMake = dataProvider->ConsumeRandomLengthString(MAX_STRING_LENGTH);
153     PrintCupsClient::GetInstance()->DeletePrinterFromCups(printerUri, printerName, printerMake);
154 }
155 
156 }  // namespace Print
157 }  // namespace OHOS
158 
159 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)160 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
161 {
162     /* Run your code on data */
163     if (data == nullptr) {
164         return 0;
165     }
166 
167     if (size < OHOS::Print::U32_AT_SIZE || size > OHOS::Print::FOO_MAX_LEN) {
168     }
169 
170     FuzzedDataProvider dataProvider(data, size);
171     OHOS::Print::TestInitCupsResources(data, size, &dataProvider);
172     OHOS::Print::TestStopCupsdService(data, size, &dataProvider);
173     OHOS::Print::TestQueryPPDInformation(data, size, &dataProvider);
174     OHOS::Print::TestAddPrinterToCups(data, size, &dataProvider);
175     OHOS::Print::TestQueryPrinterCapabilityByUri(data, size, &dataProvider);
176     OHOS::Print::TestDeleteCupsPrinter(data, size, &dataProvider);
177     OHOS::Print::TestAddCupsPrintJob(data, size, &dataProvider);
178     OHOS::Print::TestCancelCupsJob(data, size, &dataProvider);
179     OHOS::Print::TestQueryAddedPrinterList(data, size, &dataProvider);
180     OHOS::Print::TestGetPPDFile(data, size, &dataProvider);
181     OHOS::Print::TestSetDefaultPrinter(data, size, &dataProvider);
182     OHOS::Print::TestQueryPrinterAttrList(data, size, &dataProvider);
183     OHOS::Print::TestQueryPrinterInfoByPrinterId(data, size, &dataProvider);
184     OHOS::Print::TestJobCompleteCallback(data, size, &dataProvider);
185     OHOS::Print::TestCheckPrinterMakeModel(data, size, &dataProvider);
186     OHOS::Print::TestDeletePrinterFromCups(data, size, &dataProvider);
187 
188     return 0;
189 }
190