• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 "activateosaccountstub_fuzzer.h"
17 #include <string>
18 #include <thread>
19 #include <vector>
20 
21 #include "fuzz_data.h"
22 #include "ios_account.h"
23 #include "os_account_manager_service.h"
24 
25 using namespace std;
26 using namespace OHOS::AccountSA;
27 
28 namespace OHOS {
29 const int ENUM_TYPE_MAX = 5;
30 const int PRIVATE_NUMBER = 3;
31 const int END_NUMBER = 4;
32 const std::u16string IOS_ACCOUNT_DESCRIPTOR = u"ohos.accountfwk.IOsAccount";
ActivateOsAccountStubFuzzTest(const uint8_t * data,size_t size)33 bool ActivateOsAccountStubFuzzTest(const uint8_t *data, size_t size)
34 {
35     if ((data == nullptr) || (size == 0)) {
36         return false;
37     }
38 
39     MessageParcel datas;
40     FuzzData fuzzData(data, size);
41     datas.WriteInterfaceToken(IOS_ACCOUNT_DESCRIPTOR);
42 
43     if (!datas.WriteInt32(fuzzData.GetData<int32_t>())) {
44         return false;
45     }
46 
47     MessageParcel reply;
48     MessageOption option;
49     auto osAccountManagerService_ = std::make_shared<OsAccountManagerService>();
50     osAccountManagerService_ ->OnRemoteRequest(
51         static_cast<int32_t>(OsAccountInterfaceCode::ACTIVATE_OS_ACCOUNT), datas, reply, option);
52 
53     return true;
54 }
55 
ProcCreateOsAccountWithFullInfoStubFuzzTest(const uint8_t * data,size_t size)56 bool ProcCreateOsAccountWithFullInfoStubFuzzTest(const uint8_t *data, size_t size)
57 {
58     if ((data == nullptr) || (size == 0)) {
59         return false;
60     }
61 
62     MessageParcel datas;
63     if (!datas.WriteInterfaceToken(IOS_ACCOUNT_DESCRIPTOR)) {
64         return false;
65     }
66 
67     FuzzData fuzzData(data, size);
68 
69     OsAccountInfo osAccountInfo;
70     osAccountInfo.SetLocalId(fuzzData.GetData<int>());
71     osAccountInfo.SetLocalName(fuzzData.GenerateString());
72     osAccountInfo.SetShortName(fuzzData.GenerateString());
73     int typeNumber = fuzzData.GetData<int>() % ENUM_TYPE_MAX;
74     if (typeNumber == PRIVATE_NUMBER) {
75         osAccountInfo.SetType(PRIVATE);
76     } else if (typeNumber == END_NUMBER) {
77         osAccountInfo.SetType(END);
78     } else {
79         OsAccountType testType = static_cast<OsAccountType>(typeNumber);
80         osAccountInfo.SetType(testType);
81     }
82     osAccountInfo.SetSerialNumber(fuzzData.GetData<int64_t>());
83 
84     if (!datas.WriteParcelable(&osAccountInfo)) {
85         return false;
86     }
87 
88     MessageParcel reply;
89     MessageOption option;
90     auto osAccountManagerService_ = std::make_shared<OsAccountManagerService>();
91     osAccountManagerService_->OnRemoteRequest(
92         static_cast<int32_t>(OsAccountInterfaceCode::CREATE_OS_ACCOUNT_WITH_FULL_INFO), datas, reply, option);
93 
94     return true;
95 }
96 
ProcGetCreatedOsAccountNumFromDatabaseStubFuzzTest(const uint8_t * data,size_t size)97 bool ProcGetCreatedOsAccountNumFromDatabaseStubFuzzTest(const uint8_t *data, size_t size)
98 {
99     if ((data == nullptr) || (size == 0)) {
100         return false;
101     }
102 
103     MessageParcel datas;
104     if (!datas.WriteInterfaceToken(IOS_ACCOUNT_DESCRIPTOR)) {
105         return false;
106     }
107 
108     FuzzData fuzzData(data, size);
109     if (!datas.WriteString(fuzzData.GenerateString())) {
110         return false;
111     }
112 
113     MessageParcel reply;
114     MessageOption option;
115     auto osAccountManagerService_ = std::make_shared<OsAccountManagerService>();
116     osAccountManagerService_->OnRemoteRequest(
117         static_cast<int32_t>(OsAccountInterfaceCode::GET_CREATED_OS_ACCOUNT_NUM_FROM_DATABASE), datas, reply, option);
118 
119     return true;
120 }
121 
ProcGetMaxAllowCreateIdFromDatabaseStubFuzzTest(const uint8_t * data,size_t size)122 bool ProcGetMaxAllowCreateIdFromDatabaseStubFuzzTest(const uint8_t *data, size_t size)
123 {
124     if ((data == nullptr) || (size == 0)) {
125         return false;
126     }
127 
128     MessageParcel datas;
129     if (!datas.WriteInterfaceToken(IOS_ACCOUNT_DESCRIPTOR)) {
130         return false;
131     }
132 
133     FuzzData fuzzData(data, size);
134     if (!datas.WriteString(fuzzData.GenerateString())) {
135         return false;
136     }
137 
138     MessageParcel reply;
139     MessageOption option;
140     auto osAccountManagerService_ = std::make_shared<OsAccountManagerService>();
141     osAccountManagerService_->OnRemoteRequest(
142         static_cast<int32_t>(OsAccountInterfaceCode::GET_MAX_ALLOW_CREATE_ID_FROM_DATABASE), datas, reply, option);
143 
144     return true;
145 }
146 
ProcGetOsAccountFromDatabaseStubFuzzTest(const uint8_t * data,size_t size)147 bool ProcGetOsAccountFromDatabaseStubFuzzTest(const uint8_t *data, size_t size)
148 {
149     if ((data == nullptr) || (size == 0)) {
150         return false;
151     }
152 
153     MessageParcel datas;
154     if (!datas.WriteInterfaceToken(IOS_ACCOUNT_DESCRIPTOR)) {
155         return false;
156     }
157 
158     FuzzData fuzzData(data, size);
159     if (!datas.WriteString(fuzzData.GenerateString())) {
160         return false;
161     }
162 
163     if (!datas.WriteInt32(fuzzData.GetData<int32_t>())) {
164         return false;
165     }
166 
167     MessageParcel reply;
168     MessageOption option;
169     auto osAccountManagerService_ = std::make_shared<OsAccountManagerService>();
170     osAccountManagerService_->OnRemoteRequest(
171         static_cast<int32_t>(OsAccountInterfaceCode::GET_OS_ACCOUNT_FROM_DATABASE), datas, reply, option);
172 
173     return true;
174 }
175 
ProcGetOsAccountListFromDatabaseStubFuzzTest(const uint8_t * data,size_t size)176 bool ProcGetOsAccountListFromDatabaseStubFuzzTest(const uint8_t *data, size_t size)
177 {
178     if ((data == nullptr) || (size == 0)) {
179         return false;
180     }
181 
182     MessageParcel datas;
183     if (!datas.WriteInterfaceToken(IOS_ACCOUNT_DESCRIPTOR)) {
184         return false;
185     }
186 
187     FuzzData fuzzData(data, size);
188     if (!datas.WriteString(fuzzData.GenerateString())) {
189         return false;
190     }
191 
192     MessageParcel reply;
193     MessageOption option;
194     auto osAccountManagerService_ = std::make_shared<OsAccountManagerService>();
195     osAccountManagerService_->OnRemoteRequest(
196         static_cast<int32_t>(OsAccountInterfaceCode::GET_OS_ACCOUNT_LIST_FROM_DATABASE), datas, reply, option);
197 
198     return true;
199 }
200 
ProcGetSerialNumberFromDatabaseStubFuzzTest(const uint8_t * data,size_t size)201 bool ProcGetSerialNumberFromDatabaseStubFuzzTest(const uint8_t *data, size_t size)
202 {
203     if ((data == nullptr) || (size == 0)) {
204         return false;
205     }
206 
207     MessageParcel datas;
208     if (!datas.WriteInterfaceToken(IOS_ACCOUNT_DESCRIPTOR)) {
209         return false;
210     }
211 
212     FuzzData fuzzData(data, size);
213     if (!datas.WriteString(fuzzData.GenerateString())) {
214         return false;
215     }
216 
217     MessageParcel reply;
218     MessageOption option;
219     auto osAccountManagerService_ = std::make_shared<OsAccountManagerService>();
220     osAccountManagerService_->OnRemoteRequest(
221         static_cast<int32_t>(OsAccountInterfaceCode::GET_SERIAL_NUM_FROM_DATABASE), datas, reply, option);
222 
223     return true;
224 }
225 } // namespace OHOS
226 
227 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)228 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
229 {
230     /* Run your code on data */
231     OHOS::ActivateOsAccountStubFuzzTest(data, size);
232     OHOS::ProcGetCreatedOsAccountNumFromDatabaseStubFuzzTest(data, size);
233     OHOS::ProcCreateOsAccountWithFullInfoStubFuzzTest(data, size);
234     OHOS::ProcGetMaxAllowCreateIdFromDatabaseStubFuzzTest(data, size);
235     OHOS::ProcGetOsAccountFromDatabaseStubFuzzTest(data, size);
236     OHOS::ProcGetOsAccountListFromDatabaseStubFuzzTest(data, size);
237     OHOS::ProcGetSerialNumberFromDatabaseStubFuzzTest(data, size);
238     return 0;
239 }
240