• 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 
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