• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 
16 #include "formfreeinstalloperator_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 
21 #include "feature/form_share/form_free_install_operator.h"
22 #include "form_host/form_host_callback.h"
23 #include "securec.h"
24 
25 using namespace OHOS::AppExecFwk;
26 
27 namespace OHOS {
28 constexpr size_t U32_AT_SIZE = 4;
GetU32Data(const char * ptr)29 uint32_t GetU32Data(const char* ptr)
30 {
31     // convert fuzz input data to an integer
32     return (ptr[0] << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3];
33 }
DoSomethingInterestingWithMyAPI(const char * data,size_t size)34 bool DoSomethingInterestingWithMyAPI(const char* data, size_t size)
35 {
36     std::string formShareInfoKey(data, size);
37     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
38     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
39     formFreeInstallOperator.OnInstallFinished(resultCode);
40     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
41     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
42     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
43     Want want;
44     int32_t userId = static_cast<int32_t>(GetU32Data(data));
45     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
46     FormHostCallback formHostCallback;
47     int64_t formId = static_cast<int32_t>(GetU32Data(data));
48     FormRecord record;
49     sptr<IRemoteObject> callerToken = nullptr;
50     formHostCallback.OnAcquired(formId, record, callerToken);
51     formHostCallback.OnUpdate(formId, record, callerToken);
52     std::vector<int64_t> formIds;
53     formIds.emplace_back(formId);
54     formHostCallback.OnUninstall(formIds, callerToken);
55     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
56     AAFwk::Want wants;
57     formHostCallback.OnAcquireState(state, wants, callerToken);
58     std::string bundleName(data, size);
59     std::string abilityName(data, size);
60     std::string moduleName(data, size);
61     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
62 }
63 
DoSomethingInterestingWithMyAPI1(const char * data,size_t size)64 bool DoSomethingInterestingWithMyAPI1(const char* data, size_t size)
65 {
66     std::string formShareInfoKey(data, size);
67     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
68     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
69     formFreeInstallOperator.OnInstallFinished(resultCode);
70     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
71     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
72     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
73     Want want;
74     int32_t userId = static_cast<int32_t>(GetU32Data(data));
75     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
76     FormHostCallback formHostCallback;
77     int64_t formId = static_cast<int32_t>(GetU32Data(data));
78     FormRecord record;
79     sptr<IRemoteObject> callerToken = nullptr;
80     formHostCallback.OnAcquired(formId, record, callerToken);
81     formHostCallback.OnUpdate(formId, record, callerToken);
82     std::vector<int64_t> formIds;
83     formIds.emplace_back(formId);
84     formHostCallback.OnUninstall(formIds, callerToken);
85     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
86     AAFwk::Want wants;
87     formHostCallback.OnAcquireState(state, wants, callerToken);
88     std::string bundleName(data, size);
89     std::string abilityName(data, size);
90     std::string moduleName(data, size);
91     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
92 }
93 
DoSomethingInterestingWithMyAPI2(const char * data,size_t size)94 bool DoSomethingInterestingWithMyAPI2(const char* data, size_t size)
95 {
96     std::string formShareInfoKey(data, size);
97     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
98     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
99     formFreeInstallOperator.OnInstallFinished(resultCode);
100     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
101     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
102     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
103     Want want;
104     int32_t userId = static_cast<int32_t>(GetU32Data(data));
105     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
106     FormHostCallback formHostCallback;
107     int64_t formId = static_cast<int32_t>(GetU32Data(data));
108     FormRecord record;
109     sptr<IRemoteObject> callerToken = nullptr;
110     formHostCallback.OnAcquired(formId, record, callerToken);
111     formHostCallback.OnUpdate(formId, record, callerToken);
112     std::vector<int64_t> formIds;
113     formIds.emplace_back(formId);
114     formHostCallback.OnUninstall(formIds, callerToken);
115     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
116     AAFwk::Want wants;
117     formHostCallback.OnAcquireState(state, wants, callerToken);
118     std::string bundleName(data, size);
119     std::string abilityName(data, size);
120     std::string moduleName(data, size);
121     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
122 }
123 
DoSomethingInterestingWithMyAPI3(const char * data,size_t size)124 bool DoSomethingInterestingWithMyAPI3(const char* data, size_t size)
125 {
126     std::string formShareInfoKey(data, size);
127     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
128     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
129     formFreeInstallOperator.OnInstallFinished(resultCode);
130     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
131     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
132     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
133     Want want;
134     int32_t userId = static_cast<int32_t>(GetU32Data(data));
135     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
136     FormHostCallback formHostCallback;
137     int64_t formId = static_cast<int32_t>(GetU32Data(data));
138     FormRecord record;
139     sptr<IRemoteObject> callerToken = nullptr;
140     formHostCallback.OnAcquired(formId, record, callerToken);
141     formHostCallback.OnUpdate(formId, record, callerToken);
142     std::vector<int64_t> formIds;
143     formIds.emplace_back(formId);
144     formHostCallback.OnUninstall(formIds, callerToken);
145     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
146     AAFwk::Want wants;
147     formHostCallback.OnAcquireState(state, wants, callerToken);
148     std::string bundleName(data, size);
149     std::string abilityName(data, size);
150     std::string moduleName(data, size);
151     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
152 }
153 
DoSomethingInterestingWithMyAPI4(const char * data,size_t size)154 bool DoSomethingInterestingWithMyAPI4(const char* data, size_t size)
155 {
156     std::string formShareInfoKey(data, size);
157     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
158     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
159     formFreeInstallOperator.OnInstallFinished(resultCode);
160     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
161     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
162     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
163     Want want;
164     int32_t userId = static_cast<int32_t>(GetU32Data(data));
165     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
166     FormHostCallback formHostCallback;
167     int64_t formId = static_cast<int32_t>(GetU32Data(data));
168     FormRecord record;
169     sptr<IRemoteObject> callerToken = nullptr;
170     formHostCallback.OnAcquired(formId, record, callerToken);
171     formHostCallback.OnUpdate(formId, record, callerToken);
172     std::vector<int64_t> formIds;
173     formIds.emplace_back(formId);
174     formHostCallback.OnUninstall(formIds, callerToken);
175     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
176     AAFwk::Want wants;
177     formHostCallback.OnAcquireState(state, wants, callerToken);
178     std::string bundleName(data, size);
179     std::string abilityName(data, size);
180     std::string moduleName(data, size);
181     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
182 }
183 
DoSomethingInterestingWithMyAPI5(const char * data,size_t size)184 bool DoSomethingInterestingWithMyAPI5(const char* data, size_t size)
185 {
186     std::string formShareInfoKey(data, size);
187     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
188     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
189     formFreeInstallOperator.OnInstallFinished(resultCode);
190     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
191     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
192     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
193     Want want;
194     int32_t userId = static_cast<int32_t>(GetU32Data(data));
195     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
196     FormHostCallback formHostCallback;
197     int64_t formId = static_cast<int32_t>(GetU32Data(data));
198     FormRecord record;
199     sptr<IRemoteObject> callerToken = nullptr;
200     formHostCallback.OnAcquired(formId, record, callerToken);
201     formHostCallback.OnUpdate(formId, record, callerToken);
202     std::vector<int64_t> formIds;
203     formIds.emplace_back(formId);
204     formHostCallback.OnUninstall(formIds, callerToken);
205     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
206     AAFwk::Want wants;
207     formHostCallback.OnAcquireState(state, wants, callerToken);
208     std::string bundleName(data, size);
209     std::string abilityName(data, size);
210     std::string moduleName(data, size);
211     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
212 }
213 
DoSomethingInterestingWithMyAPI6(const char * data,size_t size)214 bool DoSomethingInterestingWithMyAPI6(const char* data, size_t size)
215 {
216     std::string formShareInfoKey(data, size);
217     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
218     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
219     formFreeInstallOperator.OnInstallFinished(resultCode);
220     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
221     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
222     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
223     Want want;
224     int32_t userId = static_cast<int32_t>(GetU32Data(data));
225     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
226     FormHostCallback formHostCallback;
227     int64_t formId = static_cast<int32_t>(GetU32Data(data));
228     FormRecord record;
229     sptr<IRemoteObject> callerToken = nullptr;
230     formHostCallback.OnAcquired(formId, record, callerToken);
231     formHostCallback.OnUpdate(formId, record, callerToken);
232     std::vector<int64_t> formIds;
233     formIds.emplace_back(formId);
234     formHostCallback.OnUninstall(formIds, callerToken);
235     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
236     AAFwk::Want wants;
237     formHostCallback.OnAcquireState(state, wants, callerToken);
238     std::string bundleName(data, size);
239     std::string abilityName(data, size);
240     std::string moduleName(data, size);
241     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
242 }
243 
DoSomethingInterestingWithMyAPI7(const char * data,size_t size)244 bool DoSomethingInterestingWithMyAPI7(const char* data, size_t size)
245 {
246     std::string formShareInfoKey(data, size);
247     FormFreeInstallOperator formFreeInstallOperator(formShareInfoKey, nullptr);
248     int32_t resultCode = static_cast<int32_t>(GetU32Data(data));
249     formFreeInstallOperator.OnInstallFinished(resultCode);
250     std::shared_ptr<FormFreeInstallOperator> freeInstallOperators = nullptr;
251     std::weak_ptr<FormFreeInstallOperator> freeInstallOperator = freeInstallOperators;
252     FreeInstallStatusCallBack freeInstallStatusCallBack(freeInstallOperator);
253     Want want;
254     int32_t userId = static_cast<int32_t>(GetU32Data(data));
255     freeInstallStatusCallBack.OnInstallFinished(resultCode, want, userId);
256     FormHostCallback formHostCallback;
257     int64_t formId = static_cast<int32_t>(GetU32Data(data));
258     FormRecord record;
259     sptr<IRemoteObject> callerToken = nullptr;
260     formHostCallback.OnAcquired(formId, record, callerToken);
261     formHostCallback.OnUpdate(formId, record, callerToken);
262     std::vector<int64_t> formIds;
263     formIds.emplace_back(formId);
264     formHostCallback.OnUninstall(formIds, callerToken);
265     AppExecFwk::FormState state = AppExecFwk::FormState::UNKNOWN;
266     AAFwk::Want wants;
267     formHostCallback.OnAcquireState(state, wants, callerToken);
268     std::string bundleName(data, size);
269     std::string abilityName(data, size);
270     std::string moduleName(data, size);
271     return formFreeInstallOperator.StartFreeInstall(bundleName, moduleName, abilityName);
272 }
273 }
274 
275 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)276 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
277 {
278     /* Run your code on data */
279     if (data == nullptr) {
280         return 0;
281     }
282 
283     if (size < OHOS::U32_AT_SIZE) {
284         return 0;
285     }
286 
287     char* ch = static_cast<char*>(malloc(size + 1));
288     if (ch == nullptr) {
289         return 0;
290     }
291 
292     (void)memset_s(ch, size + 1, 0x00, size + 1);
293     if (memcpy_s(ch, size + 1, data, size) != EOK) {
294         free(ch);
295         ch = nullptr;
296         return 0;
297     }
298 
299     OHOS::DoSomethingInterestingWithMyAPI(ch, size);
300     free(ch);
301     ch = nullptr;
302     return 0;
303 }
304 
305