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