/* * Copyright (c) 2022 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "getohosaccountinfo_fuzzer.h" #include "account_proxy.h" #include "account_info.h" #include "account_log_wrapper.h" #include "distributed_account_subscribe_callback.h" #include "fuzz_data.h" #include "ohos_account_kits.h" #include #include #include using namespace std; using namespace OHOS::AccountSA; class MockDistributedAccountSubscribeCallback final : public DistributedAccountSubscribeCallback { public: explicit MockDistributedAccountSubscribeCallback() {} void OnAccountsChanged(const DistributedAccountEventData &eventData) {} }; namespace OHOS { namespace { static constexpr uint32_t OHOS_ACCOUNT_STATE_NUM = 5; } bool GetOhosAccountInfoFuzzTest(const uint8_t* data, size_t size) { int32_t result; OhosAccountInfo testOhosAccountInfo; result = OhosAccountKits::GetInstance().GetOhosAccountInfo(testOhosAccountInfo); return result == ERR_OK; } bool GetOhosAccountInfoByUserIdFuzzTest(const uint8_t* data, size_t size) { if ((data == nullptr) || (size == 0)) { return false; } int32_t result; OhosAccountInfo testOhosAccountInfo; FuzzData fuzzData(data, size); int32_t userId = fuzzData.GetData(); result = OhosAccountKits::GetInstance().GetOhosAccountInfoByUserId(userId, testOhosAccountInfo); return result == ERR_OK; } bool SubscribeDistributedAccountEventFuzzTest(const uint8_t* data, size_t size) { if ((data == nullptr) || (size == 0)) { return false; } int32_t result; FuzzData fuzzData(data, size); auto loginSubscribeCallback = std::make_shared(); DISTRIBUTED_ACCOUNT_SUBSCRIBE_TYPE type = static_cast( fuzzData.GetData() % 4); result = OhosAccountKits::GetInstance().SubscribeDistributedAccountEvent(type, loginSubscribeCallback); return result == ERR_OK; } bool UnsubscribeDistributedAccountEventFuzzTest(const uint8_t* data, size_t size) { if ((data == nullptr) || (size == 0)) { return false; } int32_t result; FuzzData fuzzData(data, size); auto loginSubscribeCallback = std::make_shared(); DISTRIBUTED_ACCOUNT_SUBSCRIBE_TYPE type = static_cast( fuzzData.GetData() % 4); result = OhosAccountKits::GetInstance().UnsubscribeDistributedAccountEvent(type, loginSubscribeCallback); return result == ERR_OK; } bool SetOhosAccountInfoByUserIdFuzzTest(const uint8_t* data, size_t size) { if ((data == nullptr) || (size == 0)) { return false; } std::shared_ptr accountProxy = std::make_shared(nullptr); FuzzData fuzzData(data, size); int32_t userId = fuzzData.GetData(); OhosAccountInfo testOhosAccountInfo( fuzzData.GenerateRandomString(), fuzzData.GenerateRandomString(), fuzzData.GetData() % OHOS_ACCOUNT_STATE_NUM - 1 ); std::string testEventStr(fuzzData.GenerateRandomString()); int32_t result = accountProxy->SetOhosAccountInfoByUserId(userId, testOhosAccountInfo, testEventStr); return result == ERR_OK; } bool GetOhosAccountInfoByUserIdProxyFuzzTest(const uint8_t* data, size_t size) { if ((data == nullptr) || (size == 0)) { return false; } std::shared_ptr accountProxy = std::make_shared(nullptr); OhosAccountInfo testOhosAccountInfo; int32_t result = accountProxy->QueryOhosAccountInfo(testOhosAccountInfo); result = accountProxy->GetOhosAccountInfo(testOhosAccountInfo); FuzzData fuzzData(data, size); int32_t userId = fuzzData.GetData(); result = accountProxy->GetOhosAccountInfoByUserId(userId, testOhosAccountInfo); return result == ERR_OK; } bool QueryOhosAccountInfoByUserIdProxyFuzzTest(const uint8_t* data, size_t size) { if ((data == nullptr) || (size == 0)) { return false; } std::shared_ptr accountProxy = std::make_shared(nullptr); OhosAccountInfo testOhosAccountInfo; FuzzData fuzzData(data, size); int32_t userId = fuzzData.GetData(); int32_t accountId = 0; int32_t result = accountProxy->QueryDeviceAccountId(accountId); result = accountProxy->QueryOhosAccountInfoByUserId(userId, testOhosAccountInfo); return result == ERR_OK; } } /* Fuzzer entry point */ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { /* Run your code on data */ OHOS::GetOhosAccountInfoFuzzTest(data, size); OHOS::GetOhosAccountInfoByUserIdFuzzTest(data, size); OHOS::SubscribeDistributedAccountEventFuzzTest(data, size); OHOS::UnsubscribeDistributedAccountEventFuzzTest(data, size); OHOS::SetOhosAccountInfoByUserIdFuzzTest(data, size); OHOS::GetOhosAccountInfoByUserIdProxyFuzzTest(data, size); OHOS::QueryOhosAccountInfoByUserIdProxyFuzzTest(data, size); return 0; }