1 /*
2 * Copyright (c) 2024 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 #define private public
17 #define protected public
18 #include "enable_ime_data_parser.h"
19 #undef private
20
21 #include "enableimedataparse_fuzzer.h"
22
23 using namespace OHOS::MiscServices;
24 namespace OHOS {
25 constexpr size_t THRESHOLD = 10;
FuzzInitialize(const int32_t userId)26 void FuzzInitialize(const int32_t userId)
27 {
28 EnableImeDataParser::GetInstance()->Initialize(userId);
29 }
30
FuzzOnUserChanged(const int32_t userId)31 void FuzzOnUserChanged(const int32_t userId)
32 {
33 EnableImeDataParser::GetInstance()->OnUserChanged(userId);
34 }
35
FuzzCheckNeedSwitch(const std::string & key,SwitchInfo & switchInfo,const int32_t userId)36 void FuzzCheckNeedSwitch(const std::string &key, SwitchInfo &switchInfo, const int32_t userId)
37 {
38 EnableImeDataParser::GetInstance()->CheckNeedSwitch(key, switchInfo, userId);
39 EnableImeDataParser::GetInstance()->CheckNeedSwitch(switchInfo, userId);
40 }
41
FuzzGetEnableData(const std::string & key,std::vector<std::string> & enableVec,const int32_t userId)42 void FuzzGetEnableData(const std::string &key, std::vector<std::string> &enableVec, const int32_t userId)
43 {
44 EnableImeDataParser::GetInstance()->GetEnableData(key, enableVec, userId);
45 }
46
FuzzParseEnableIme(const std::string & valueStr,int32_t userId,std::vector<std::string> & enableVec)47 void FuzzParseEnableIme(const std::string &valueStr, int32_t userId, std::vector<std::string> &enableVec)
48 {
49 EnableImeDataParser::GetInstance()->ParseEnableIme(valueStr, userId, enableVec);
50 }
51
FuzzParseEnableKeyboard(const std::string & valueStr,int32_t userId,std::vector<std::string> & enableVec)52 void FuzzParseEnableKeyboard(const std::string &valueStr, int32_t userId, std::vector<std::string> &enableVec)
53 {
54 EnableImeDataParser::GetInstance()->ParseEnableKeyboard(valueStr, userId, enableVec);
55 }
56
FuzzCheckTargetEnableName(const std::string & key,const std::string & targetName,std::string & nextIme,const int32_t userId)57 void FuzzCheckTargetEnableName(const std::string &key, const std::string &targetName, std::string &nextIme,
58 const int32_t userId)
59 {
60 EnableImeDataParser::GetInstance()->CheckTargetEnableName(key, targetName, nextIme, userId);
61 }
62 } // namespace OHOS
63 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)64 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
65 {
66 if (size < OHOS::THRESHOLD) {
67 return 0;
68 }
69 /* Run your code on data */
70 const int32_t userId = static_cast<int32_t>(size);
71 std::string fuzzedString(reinterpret_cast<const char *>(data), size);
72 SwitchInfo switchInfo;
73 std::vector<std::string> enableVec;
74
75 OHOS::FuzzInitialize(userId);
76 OHOS::FuzzOnUserChanged(userId);
77 OHOS::FuzzCheckNeedSwitch(fuzzedString, switchInfo, userId);
78 OHOS::FuzzGetEnableData(fuzzedString, enableVec, userId);
79
80 OHOS::FuzzParseEnableIme(fuzzedString, userId, enableVec);
81 OHOS::FuzzParseEnableKeyboard(fuzzedString, userId, enableVec);
82 OHOS::FuzzCheckTargetEnableName(fuzzedString, fuzzedString, fuzzedString, userId);
83 return 0;
84 }