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