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 "queryaccountinfo_fuzzer.h"
17
18 #include "os_account_manager.h"
19 #include "account_log_wrapper.h"
20 #include "fuzz_data.h"
21 #include "os_account_constants.h"
22 #include <cstdint>
23 #include <string>
24 #include <vector>
25
26 using namespace std;
27 using namespace OHOS::AccountSA;
28
29 namespace OHOS {
QueryActiveOsAccountIdsFuzzTest(const uint8_t * data,size_t size)30 bool QueryActiveOsAccountIdsFuzzTest(const uint8_t* data, size_t size)
31 {
32 int32_t result = ERR_OK;
33 std::vector<int32_t> testIds;
34 result = OsAccountManager::QueryActiveOsAccountIds(testIds);
35 return result == ERR_OK;
36 }
37
QueryOsAccountConstraintSourceTypesFuzzTest(const uint8_t * data,size_t size)38 bool QueryOsAccountConstraintSourceTypesFuzzTest(const uint8_t* data, size_t size)
39 {
40 int32_t result = ERR_OK;
41 if ((data != nullptr) && (size != 0)) {
42 FuzzData fuzzData(data, size);
43 std::vector<ConstraintSourceTypeInfo> testConstraintSourceTypeInfos;
44 int32_t testId = fuzzData.GetData<int32_t>();
45 std::string testConstraint(fuzzData.GenerateRandomString());
46 result = OsAccountManager::QueryOsAccountConstraintSourceTypes(
47 testId, testConstraint, testConstraintSourceTypeInfos);
48 }
49 return result == ERR_OK;
50 }
51
QueryOsAccountByIdFuzzTest(const uint8_t * data,size_t size)52 bool QueryOsAccountByIdFuzzTest(const uint8_t* data, size_t size)
53 {
54 int32_t result = ERR_OK;
55 if ((data != nullptr) && (size != 0)) {
56 FuzzData fuzzData(data, size);
57 int32_t testId = fuzzData.GetData<int32_t>();
58 OsAccountInfo osAccountInfo;
59 result = OsAccountManager::QueryOsAccountById(testId, osAccountInfo);
60 }
61 return result == ERR_OK;
62 }
63
QueryMaxOsAccountNumberFuzzTest(const uint8_t * data,size_t size)64 bool QueryMaxOsAccountNumberFuzzTest(const uint8_t* data, size_t size)
65 {
66 int32_t result = ERR_OK;
67 uint32_t testMaxOsAccountNumber;
68 result = OsAccountManager::QueryMaxOsAccountNumber(testMaxOsAccountNumber);
69 return result == ERR_OK;
70 }
71
QueryMaxLoggedInOsAccountNumberFuzzTest(const uint8_t * data,size_t size)72 bool QueryMaxLoggedInOsAccountNumberFuzzTest(const uint8_t* data, size_t size)
73 {
74 uint32_t maxNum;
75 ErrCode result = OsAccountManager::QueryMaxLoggedInOsAccountNumber(maxNum);
76 return result == ERR_OK;
77 }
78
QueryCurrentOsAccountFuzzTest(const uint8_t * data,size_t size)79 bool QueryCurrentOsAccountFuzzTest(const uint8_t* data, size_t size)
80 {
81 int32_t result = ERR_OK;
82 if ((data != nullptr) && (size != 0)) {
83 FuzzData fuzzData(data, size);
84 std::string testName(fuzzData.GenerateRandomString());
85 OsAccountInfo osAccountInfo;
86 osAccountInfo.SetLocalName(testName);
87 result = OsAccountManager::QueryCurrentOsAccount(osAccountInfo);
88 }
89 return result == ERR_OK;
90 }
91
QueryAllCreatedOsAccountsFuzzTest(const uint8_t * data,size_t size)92 bool QueryAllCreatedOsAccountsFuzzTest(const uint8_t* data, size_t size)
93 {
94 int32_t result = ERR_OK;
95 std::vector<OsAccountInfo> osAccountInfos;
96 result = OsAccountManager::QueryAllCreatedOsAccounts(osAccountInfos);
97 return result == ERR_OK;
98 }
99 } // namespace
100
101 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)102 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
103 {
104 /* Run your code on data */
105 OHOS::QueryActiveOsAccountIdsFuzzTest(data, size);
106 OHOS::QueryOsAccountConstraintSourceTypesFuzzTest(data, size);
107 OHOS::QueryOsAccountByIdFuzzTest(data, size);
108 OHOS::QueryMaxOsAccountNumberFuzzTest(data, size);
109 OHOS::QueryMaxLoggedInOsAccountNumberFuzzTest(data, size);
110 OHOS::QueryCurrentOsAccountFuzzTest(data, size);
111 OHOS::QueryAllCreatedOsAccountsFuzzTest(data, size);
112 return 0;
113 }
114
115