• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "setvoicemailinfo_fuzzer.h"
17 
18 #include <cstddef>
19 #include <cstdint>
20 #include <string_ex.h>
21 #include <thread>
22 
23 #define private public
24 #include "addcoreservicetoken_fuzzer.h"
25 #include "core_service.h"
26 #include "napi_util.h"
27 #include "system_ability_definition.h"
28 #include "tel_event_handler.h"
29 #include "unistd.h"
30 #include "tel_ril_manager.h"
31 
32 using namespace OHOS::Telephony;
33 namespace OHOS {
34 static bool g_isInited = false;
35 constexpr int32_t SLOT_NUM = 2;
36 constexpr int32_t LOCK_TYPE = 2;
37 
IsServiceInited()38 bool IsServiceInited()
39 {
40     if (!g_isInited) {
41         DelayedSingleton<CoreService>::GetInstance()->OnStart();
42         if (DelayedSingleton<CoreService>::GetInstance()->GetServiceRunningState() ==
43             static_cast<int32_t>(ServiceRunningState::STATE_RUNNING)) {
44             g_isInited = true;
45         }
46     }
47     return g_isInited;
48 }
49 
GetDefaultVoiceSlotId(const uint8_t * data,size_t size)50 void GetDefaultVoiceSlotId(const uint8_t *data, size_t size)
51 {
52     if (!IsServiceInited()) {
53         return;
54     }
55 
56     MessageParcel dataMessageParcel;
57     dataMessageParcel.WriteBuffer(data, size);
58     dataMessageParcel.RewindRead(0);
59     MessageParcel reply;
60     DelayedSingleton<CoreService>::GetInstance()->OnGetDefaultVoiceSlotId(dataMessageParcel, reply);
61 }
62 
GetActiveSimAccountInfoList(const uint8_t * data,size_t size)63 void GetActiveSimAccountInfoList(const uint8_t *data, size_t size)
64 {
65     if (!IsServiceInited()) {
66         return;
67     }
68 
69     MessageParcel dataMessageParcel;
70     dataMessageParcel.WriteBuffer(data, size);
71     dataMessageParcel.RewindRead(0);
72     MessageParcel reply;
73     DelayedSingleton<CoreService>::GetInstance()->OnGetActiveSimAccountInfoList(dataMessageParcel, reply);
74 }
75 
GetOperatorConfigs(const uint8_t * data,size_t size)76 void GetOperatorConfigs(const uint8_t *data, size_t size)
77 {
78     if (!IsServiceInited()) {
79         return;
80     }
81 
82     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
83     MessageParcel dataMessageParcel;
84     dataMessageParcel.WriteInt32(slotId);
85     dataMessageParcel.WriteBuffer(data, size);
86     dataMessageParcel.RewindRead(0);
87     MessageParcel reply;
88     DelayedSingleton<CoreService>::GetInstance()->OnGetOperatorConfig(dataMessageParcel, reply);
89 }
90 
GetLockState(const uint8_t * data,size_t size)91 void GetLockState(const uint8_t *data, size_t size)
92 {
93     if (!IsServiceInited()) {
94         return;
95     }
96 
97     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
98     MessageParcel dataMessageParcel;
99     dataMessageParcel.WriteInt32(slotId);
100     dataMessageParcel.WriteInt32(static_cast<int32_t>(*data % LOCK_TYPE));
101     dataMessageParcel.WriteBuffer(data, size);
102     dataMessageParcel.RewindRead(0);
103     MessageParcel reply;
104     DelayedSingleton<CoreService>::GetInstance()->OnGetLockState(dataMessageParcel, reply);
105 }
106 
SetVoiceMailInfo(const uint8_t * data,size_t size)107 void SetVoiceMailInfo(const uint8_t *data, size_t size)
108 {
109     if (!IsServiceInited()) {
110         return;
111     }
112 
113     int32_t slotId = static_cast<int32_t>(*data % SLOT_NUM);
114     std::string mailNumber(reinterpret_cast<const char *>(data), size);
115     std::string mailName(reinterpret_cast<const char *>(data), size);
116     auto mailNameU16 = Str8ToStr16(mailName);
117     auto mailNumberU16 = Str8ToStr16(mailNumber);
118     MessageParcel dataMessageParcel;
119     dataMessageParcel.WriteInt32(slotId);
120     dataMessageParcel.WriteString16(mailNameU16);
121     dataMessageParcel.WriteString16(mailNumberU16);
122     dataMessageParcel.RewindRead(0);
123     MessageParcel reply;
124     DelayedSingleton<CoreService>::GetInstance()->OnSetVoiceMailInfo(dataMessageParcel, reply);
125 }
126 
DoSomethingInterestingWithMyAPI(const uint8_t * data,size_t size)127 void DoSomethingInterestingWithMyAPI(const uint8_t *data, size_t size)
128 {
129     if (data == nullptr || size == 0) {
130         return;
131     }
132 
133     GetDefaultVoiceSlotId(data, size);
134     GetOperatorConfigs(data, size);
135     GetActiveSimAccountInfoList(data, size);
136     GetLockState(data, size);
137     SetVoiceMailInfo(data, size);
138     auto telRilManager = std::static_pointer_cast<TelRilManager>(
139         DelayedSingleton<CoreService>::GetInstance()->telRilManager_);
140     if (telRilManager == nullptr || telRilManager->handler_ == nullptr) {
141         return;
142     }
143     telRilManager->handler_->ClearFfrt(false);
144     telRilManager->handler_->queue_ = nullptr;
145     return;
146 }
147 } // namespace OHOS
148 
149 /* Fuzzer entry point */
LLVMFuzzerInitialize(int * argc,char *** argv)150 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
151 {
152     OHOS::AddCoreServiceTokenFuzzer token;
153     return 0;
154 }
155 
156 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)157 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
158 {
159     /* Run your code on data */
160     OHOS::DoSomethingInterestingWithMyAPI(data, size);
161     OHOS::DelayedSingleton<CoreService>::DestroyInstance();
162     return 0;
163 }
164