• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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 "enableupgrademanager_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 #define private public
21 #define protected public
22 #include "enable_upgrade_manager.h"
23 #include "full_ime_info_manager.h"
24 #undef private
25 
26 using namespace OHOS::MiscServices;
27 namespace OHOS {
28 
FuzzAgentStub(const uint8_t * data,size_t size)29 void FuzzAgentStub(const uint8_t *data, size_t size)
30 {
31     static std::vector<FullImeInfo> imeInfos;
32     static std::set<std::string> bundleNames;
33     static std::vector<std::string> bundleNamesVec;
34     static std::vector<ImeEnabledInfo> enabledInfos;
35     std::string fuzzedString(reinterpret_cast<const char *>(data), size);
36     auto fuzzInt32 = static_cast<int32_t>(size);
37     auto fuzzUint32 = static_cast<uint32_t>(size);
38     auto fuzzedBool = static_cast<bool>(data[0] % 2);
39     int32_t userId = fuzzInt32;
40     FullImeInfo imeInfo = { .isNewIme = fuzzedBool, .tokenId = fuzzUint32, .appId = fuzzedString,
41         .versionCode = fuzzUint32 };
42     imeInfos.push_back(imeInfo);
43     bundleNames.insert(fuzzedString);
44     bundleNamesVec.push_back(fuzzedString);
45     ImeEnabledInfo imeEnabeleInfo;
46     imeEnabeleInfo.bundleName = fuzzedString;
47     imeEnabeleInfo.extensionName = fuzzedString;
48     imeEnabeleInfo.enabledStatus = static_cast<EnabledStatus>(fuzzInt32);
49     imeEnabeleInfo.stateUpdateTime = fuzzedString;
50 
51     ImeEnabledCfg newEnabledCfg;
52     newEnabledCfg.version = fuzzedString;
53     newEnabledCfg.enabledInfos = enabledInfos;
54     ImePersistInfo persisInfo;
55     persisInfo.userId = userId;
56     persisInfo.currentIme = fuzzedString;
57     persisInfo.currentSubName = fuzzedString;
58     persisInfo.tempScreenLockIme = fuzzedString;
59     persisInfo.isDefaultImeSet = fuzzedBool;
60     EnabledStatus initStatus = EnabledStatus::DISABLED;
61     EnableUpgradeManager::GetInstance().Upgrade(userId, imeInfos);
62     EnableUpgradeManager::GetInstance().GetEnabledTable(userId, bundleNames);
63     EnableUpgradeManager::GetInstance().GetFullExperienceTable(userId, bundleNames);
64     EnableUpgradeManager::GetInstance().MergeTwoTable(userId, enabledInfos);
65     EnableUpgradeManager::GetInstance().PaddedByBundleMgr(userId, imeInfos, enabledInfos);
66     EnableUpgradeManager::GetInstance().UpdateGlobalEnabledTable(userId, newEnabledCfg);
67     EnableUpgradeManager::GetInstance().GetGlobalTableUserId(fuzzedString);
68     EnableUpgradeManager::GetInstance().GenerateGlobalContent(userId, bundleNamesVec);
69     EnableUpgradeManager::GetInstance().GetImePersistCfg(userId, persisInfo);
70     EnableUpgradeManager::GetInstance().PaddedByImePersistCfg(userId, enabledInfos);
71     EnableUpgradeManager::GetInstance().ComputeEnabledStatus(fuzzedString, initStatus);
72 }
73 
FuzzFullImeInfo(const uint8_t * data,size_t size)74 void FuzzFullImeInfo(const uint8_t *data, size_t size)
75 {
76     auto fuzzInt32 = static_cast<int32_t>(size);
77     std::string fuzzedString(reinterpret_cast<const char *>(data), size);
78     auto fuzzedBool = static_cast<bool>(data[0] % 2);
79     auto fuzzUint32 = static_cast<uint32_t>(size);
80     static std::vector<FullImeInfo> infos;
81     FullImeInfo imeInfo = { .isNewIme = fuzzedBool, .tokenId = fuzzUint32, .appId = fuzzedString,
82         .versionCode = fuzzUint32 };
83     infos.push_back(imeInfo);
84     FullImeInfoManager::GetInstance().Switch(fuzzInt32);
85     FullImeInfoManager::GetInstance().Update();
86     FullImeInfoManager::GetInstance().Delete(fuzzInt32);
87     FullImeInfoManager::GetInstance().Add(fuzzInt32, fuzzedString);
88     FullImeInfoManager::GetInstance().Delete(fuzzInt32, fuzzedString);
89     FullImeInfoManager::GetInstance().Update(fuzzInt32, fuzzedString);
90     FullImeInfoManager::GetInstance().Has(fuzzInt32, fuzzedString);
91     FullImeInfoManager::GetInstance().AddUser(fuzzInt32, infos);
92     FullImeInfoManager::GetInstance().AddPackage(fuzzInt32, fuzzedString, imeInfo);
93     FullImeInfoManager::GetInstance().DeletePackage(fuzzInt32, fuzzedString);
94 }
95 } // namespace OHOS
96 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)97 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
98 {
99     /* Run your code on data */
100     OHOS::FuzzAgentStub(data, size);
101     OHOS::FuzzFullImeInfo(data, size);
102     return 0;
103 }