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 #ifdef FUZZTEST
17 #define private public
18 #define protected public
19 #endif
20
21 #include "unittest_fuzzer.h"
22 #include "addsmstoken_fuzzer.h"
23 #include "mms_apn_info.h"
24 #include "mms_network_client.h"
25 #include "mms_persist_helper.h"
26 #include "mms_conn_callback_stub.h"
27 #include "cdma_sms_sender.h"
28 #include "cdma_sms_receive_handler.h"
29 #include "cdma_sms_message.h"
30
31 namespace OHOS {
32 using namespace Telephony;
33
34 class Fuzzer {
35 public:
Fuzzer(const uint8_t * data,size_t size)36 Fuzzer(const uint8_t* data, size_t size):g_data(data), g_size(size) {}
~Fuzzer()37 virtual ~Fuzzer() {};
38 virtual void StartFuzzerTest() = 0;
39
40 protected:
GetString(size_t size=0)41 std::string GetString(size_t size = 0)
42 {
43 std::string str(reinterpret_cast<const char*>(g_data), g_size);
44 if (size != 0 && size < str.size()) {
45 str.resize(size);
46 }
47 return str;
48 }
GetPort(int nRangeStart=0,int nRangeEnd=0)49 size_t GetPort(int nRangeStart = 0, int nRangeEnd = 0)
50 {
51 nRangeStart = nRangeStart != 0 ? nRangeStart : m_nPortRangeStartDef;
52 nRangeEnd = nRangeEnd != 0 ? nRangeEnd : m_nPortRangeEndDef;
53 nRangeEnd = nRangeEnd > nRangeStart ? nRangeEnd : nRangeStart + 1;
54
55 return g_size % (nRangeEnd - nRangeStart) + nRangeStart;
56 }
57 template<typename T>
GetEnumRandom(std::vector<T> vect)58 T GetEnumRandom(std::vector<T> vect)
59 {
60 size_t nItem = g_size % vect.size();
61 return vect[nItem];
62 }
63
GetDataRange(char * szBuf,uint8_t & nSize,int nRangeMin,int nRangeMax)64 void GetDataRange(char* szBuf, uint8_t& nSize, int nRangeMin, int nRangeMax)
65 {
66 nSize = g_size % (nRangeMax-nRangeMin) + nRangeMin;
67 if (memset_s(szBuf, nSize, 0x00, nSize) != EOK
68 || memcpy_s(szBuf, nSize, g_data, nSize) != EOK) {
69 return;
70 }
71 }
GetPduVect()72 std::vector<uint8_t> GetPduVect()
73 {
74 std::string strData = GetString(30);
75 std::vector<uint8_t> vectUint8(strData.begin(), strData.end());
76
77 static std::vector<int> vectPduType {0, 1, 2, 3};
78 vectUint8[0] = GetEnumRandom(vectPduType);
79 return vectUint8;
80 }
81 protected:
GetEnumRandom_SmsEncodingType()82 SmsEncodingType GetEnumRandom_SmsEncodingType()
83 {
84 static std::vector<SmsEncodingType> vect{
85 SmsEncodingType::OCTET, SmsEncodingType::EPM, SmsEncodingType::ASCII_7BIT,
86 SmsEncodingType::IA5, SmsEncodingType::UNICODE, SmsEncodingType::SHIFT_JIS,
87 SmsEncodingType::KOREAN, SmsEncodingType::LATIN_HEBREW, SmsEncodingType::LATIN,
88 SmsEncodingType::GSM7BIT, SmsEncodingType::GSMDCS, SmsEncodingType::EUCKR,
89 SmsEncodingType::RESERVED
90 };
91 return GetEnumRandom(vect);
92 }
GetEnumRandom_CdmaTransportMsgType()93 CdmaTransportMsgType GetEnumRandom_CdmaTransportMsgType()
94 {
95 static std::vector<CdmaTransportMsgType> vect{
96 CdmaTransportMsgType::P2P,
97 CdmaTransportMsgType::BROADCAST,
98 CdmaTransportMsgType::ACK
99 };
100 return GetEnumRandom(vect);
101 }
GetEnumRandom_DataCodingScheme()102 DataCodingScheme GetEnumRandom_DataCodingScheme()
103 {
104 static std::vector<DataCodingScheme> vect{
105 DataCodingScheme::DATA_CODING_7BIT,
106 DataCodingScheme::DATA_CODING_8BIT,
107 DataCodingScheme::DATA_CODING_UCS2,
108 DataCodingScheme::DATA_CODING_AUTO,
109 DataCodingScheme::DATA_CODING_EUCKR,
110 DataCodingScheme::DATA_CODING_ASCII7BIT
111 };
112 return GetEnumRandom(vect);
113 }
GetEnumRandom_SmsTransTelsvcId()114 SmsTransTelsvcId GetEnumRandom_SmsTransTelsvcId()
115 {
116 static std::vector<SmsTransTelsvcId> vect = {
117 SmsTransTelsvcId::CMT_91, SmsTransTelsvcId::CPT_95,
118 SmsTransTelsvcId::CMT_95, SmsTransTelsvcId::VMN_95,
119 SmsTransTelsvcId::WAP, SmsTransTelsvcId::WEMT,
120 SmsTransTelsvcId::SCPT, SmsTransTelsvcId::CATPT,
121 SmsTransTelsvcId::RESERVED
122 };
123 return GetEnumRandom(vect);
124 }
GetEnumRandom_TeleserviceMsgType()125 TeleserviceMsgType GetEnumRandom_TeleserviceMsgType()
126 {
127 static std::vector<TeleserviceMsgType> vect = {
128 TeleserviceMsgType::DELIVER, TeleserviceMsgType::SUBMIT,
129 TeleserviceMsgType::CANCEL, TeleserviceMsgType::DELIVERY_ACK,
130 TeleserviceMsgType::USER_ACK, TeleserviceMsgType::READ_ACK,
131 TeleserviceMsgType::DELIVER_REPORT, TeleserviceMsgType::SUBMIT_REPORT,
132 TeleserviceMsgType::MAX_VALUE, TeleserviceMsgType::RESERVED
133 };
134 return GetEnumRandom(vect);
135 }
136 protected:
137 const uint8_t* g_data;
138 const size_t g_size;
139 const int32_t g_slotId = 2;
140 const int m_nPortRangeStartDef = 1024;
141 const int m_nPortRangeEndDef = 49151;
142 };
143
144 /*
145 * services/mms/include/mms_apn_info.h
146 * services/mms/mms_apn_info.cpp
147 */
148 class MmsApnInfoFuzzer final : public Fuzzer {
149 public:
150 using Fuzzer::Fuzzer;
~MmsApnInfoFuzzer()151 ~MmsApnInfoFuzzer() final {};
152 public:
StartFuzzerTest()153 void StartFuzzerTest() override
154 {
155 if (!CreateObject()) {
156 return;
157 }
158 TestSetMmscUrl();
159 TestGetMmscUrl();
160 TestSetMmsProxyAddressAndProxyPort();
161 TestGetMmsProxyAddressAndProxyPort();
162 DestoryObject();
163 }
164 protected:
CreateObject()165 bool CreateObject()
166 {
167 m_pMmsApnInfo = std::make_unique<MmsApnInfo>(g_slotId);
168 return m_pMmsApnInfo != nullptr;
169 }
DestoryObject()170 void DestoryObject()
171 {
172 m_pMmsApnInfo.reset();
173 }
TestSetMmscUrl()174 void TestSetMmscUrl()
175 {
176 std::string strUrl = GetString();
177 m_pMmsApnInfo->setMmscUrl(strUrl);
178 }
TestGetMmscUrl()179 void TestGetMmscUrl()
180 {
181 m_pMmsApnInfo->getMmscUrl();
182 }
TestSetMmsProxyAddressAndProxyPort()183 void TestSetMmsProxyAddressAndProxyPort()
184 {
185 std::string strUrl = GetString();
186 m_pMmsApnInfo->setMmsProxyAddressAndProxyPort(strUrl);
187 }
TestGetMmsProxyAddressAndProxyPort()188 void TestGetMmsProxyAddressAndProxyPort()
189 {
190 m_pMmsApnInfo->getMmsProxyAddressAndProxyPort();
191 }
192 private:
193 std::unique_ptr<MmsApnInfo> m_pMmsApnInfo;
194 };
195
196 /*
197 * services/mms/include/mms_network_client.h
198 * services/mms/mms_network_client.cpp
199 */
200 class MmsNetworkClientFuzzer final : public Fuzzer {
201 public:
202 using Fuzzer::Fuzzer;
~MmsNetworkClientFuzzer()203 ~MmsNetworkClientFuzzer() final {}
204 public:
StartFuzzerTest()205 void StartFuzzerTest() override
206 {
207 if (!CreateObject()) {
208 return;
209 }
210 TestExecutePost();
211 TestExecuteGet();
212 DestoryObject();
213 }
214 protected:
CreateObject()215 bool CreateObject()
216 {
217 m_pMmsNetworkClient = std::make_unique<MmsNetworkClient>(g_slotId);
218 return m_pMmsNetworkClient != nullptr;
219 }
DestoryObject()220 void DestoryObject()
221 {
222 m_pMmsNetworkClient.reset();
223 }
TestExecutePost()224 void TestExecutePost()
225 {
226 std::string strNormalUrl = "www.baidu.com";
227 std::string strBadUrl = GetString(30);
228 std::string strPostData = GetString(256);
229 m_pMmsNetworkClient->Execute("POST", strNormalUrl, strPostData, "ua", "uaprof");
230 m_pMmsNetworkClient->Execute("POST", strBadUrl, strPostData, "ua", "uaprof");
231 }
TestExecuteGet()232 void TestExecuteGet()
233 {
234 std::string strNormalUrl = "www.baidu.com";
235 std::string strBadUrl = GetString(30);
236 std::string strPostData = GetString(256);
237 m_pMmsNetworkClient->Execute("GET", strNormalUrl, strPostData, "ua", "uaprof");
238 m_pMmsNetworkClient->Execute("GET", strBadUrl, strPostData, "ua", "uaprof");
239 }
240 private:
241 std::unique_ptr<MmsNetworkClient> m_pMmsNetworkClient;
242 };
243
244 class MmsPersistHelperFuzzer final : public Fuzzer {
245 public:
246 using Fuzzer::Fuzzer;
~MmsPersistHelperFuzzer()247 ~MmsPersistHelperFuzzer() final {}
248 public:
StartFuzzerTest()249 void StartFuzzerTest() override
250 {
251 if (!CreateObject()) {
252 return;
253 }
254 TestMakeUrl();
255 TestInsert();
256 TestGet();
257 TestDelete();
258 TestGet();
259 DestoryObject();
260 }
261 protected:
CreateObject()262 bool CreateObject()
263 {
264 m_pMmsPersistHelper = std::make_unique<MmsPersistHelper>();
265 return m_pMmsPersistHelper != nullptr;
266 }
DestoryObject()267 void DestoryObject()
268 {
269 m_pMmsPersistHelper.reset();
270 }
TestMakeUrl()271 void TestMakeUrl()
272 {
273 std::string strUrl = GetString();
274 }
TestInsert()275 void TestInsert()
276 {
277 std::string strMmsPdu = GetString();
278 m_pMmsPersistHelper->InsertMmsPdu(strMmsPdu, m_strUrl);
279 }
TestGet()280 void TestGet()
281 {
282 m_pMmsPersistHelper->GetMmsPdu(m_strUrl);
283 }
TestDelete()284 void TestDelete()
285 {
286 m_pMmsPersistHelper->DeleteMmsPdu(m_strUrl);
287 }
288 private:
289 std::string m_strUrl;
290 std::unique_ptr<MmsPersistHelper> m_pMmsPersistHelper;
291 };
292
293 class MmsConnCallbackStubFuzzer final : public Fuzzer {
294 public:
295 using Fuzzer::Fuzzer;
~MmsConnCallbackStubFuzzer()296 ~MmsConnCallbackStubFuzzer() final {}
297 public:
StartFuzzerTest()298 void StartFuzzerTest() override
299 {
300 if (!CreateObject()) {
301 return;
302 }
303 TestNetAvailable();
304 DestoryObject();
305 }
306 protected:
CreateObject()307 bool CreateObject()
308 {
309 m_pMmsConnCallbackStub = std::make_unique<MmsConnCallbackStub>();
310 return m_pMmsConnCallbackStub != nullptr;
311 }
DestoryObject()312 void DestoryObject()
313 {
314 m_pMmsConnCallbackStub.reset();
315 }
TestNetAvailable()316 void TestNetAvailable()
317 {
318 sptr<NetManagerStandard::NetHandle> pNetHandle = new NetManagerStandard::NetHandle;
319 sptr<NetManagerStandard::NetAllCapabilities> pNetAllCap = new NetManagerStandard::NetAllCapabilities;
320 sptr<NetManagerStandard::NetLinkInfo> pNetLinkInfo = new NetManagerStandard::NetLinkInfo;
321
322 m_pMmsConnCallbackStub->NetAvailable(pNetHandle);
323 m_pMmsConnCallbackStub->NetCapabilitiesChange(pNetHandle, pNetAllCap);
324 m_pMmsConnCallbackStub->NetConnectionPropertiesChange(pNetHandle, pNetLinkInfo);
325 m_pMmsConnCallbackStub->NetLost(pNetHandle);
326 m_pMmsConnCallbackStub->NetUnavailable();
327 m_pMmsConnCallbackStub->NetBlockStatusChange(pNetHandle, false);
328 }
329 private:
330 std::unique_ptr<MmsConnCallbackStub> m_pMmsConnCallbackStub;
331 };
332
333 class CdmaSmsSenderFuzzer final : public Fuzzer {
334 public:
335 using Fuzzer::Fuzzer;
~CdmaSmsSenderFuzzer()336 ~CdmaSmsSenderFuzzer() final {}
337 public:
StartFuzzerTest()338 void StartFuzzerTest() override
339 {
340 if (!CreateObject()) {
341 return;
342 }
343 TestTextBasedSmsDeliveryViaIms();
344 TestSendSmsToRil();
345 TestGetOrSimpleCall();
346 EncodeMsg();
347 DestoryObject();
348 }
349 protected:
CreateObject()350 bool CreateObject()
351 {
352 m_pCdmaSmsSender = std::make_unique<CdmaSmsSender>(g_slotId, &CdmaSmsSenderFuzzer::SendRetryFunc);
353 m_pCdmaSmsSender->Init();
354 return m_pCdmaSmsSender != nullptr;
355 }
DestoryObject()356 void DestoryObject()
357 {
358 m_pCdmaSmsSender.reset();
359 }
SendRetryFunc(std::shared_ptr<SmsSendIndexer> index)360 static void SendRetryFunc(std::shared_ptr<SmsSendIndexer> index) {}
TestTextBasedSmsDeliveryViaIms()361 void TestTextBasedSmsDeliveryViaIms()
362 {
363 std::string strScAddr = GetString(MAX_ADDRESS_LEN-1);
364 std::string strDtAddr = GetString(MAX_ADDRESS_LEN-1);
365 std::string strText = GetString();
366 size_t nPort = GetPort();
367 sptr<ISendShortMessageCallback> sendCallback = nullptr;
368 sptr<IDeliveryShortMessageCallback> deliveryCallback = nullptr;
369
370 m_pCdmaSmsSender->TextBasedSmsDeliveryViaIms(strDtAddr, strScAddr, strText, sendCallback, deliveryCallback);
371 m_pCdmaSmsSender->DataBasedSmsDeliveryViaIms(
372 strDtAddr, strScAddr, nPort, g_data, g_size, sendCallback, deliveryCallback);
373 }
TestSendSmsToRil()374 void TestSendSmsToRil()
375 {
376 std::string strScAddr = GetString(MAX_ADDRESS_LEN-1);
377 std::string strDtAddr = GetString(MAX_ADDRESS_LEN-1);
378 std::string strText = GetString();
379 sptr<ISendShortMessageCallback> sendCallback = nullptr;
380 sptr<IDeliveryShortMessageCallback> deliveryCallback = nullptr;
381 std::shared_ptr<SmsSendIndexer> pSendIndexer
382 = std::make_shared<SmsSendIndexer>(strDtAddr, strScAddr, strText,
383 sendCallback, deliveryCallback);
384
385 m_pCdmaSmsSender->SendSmsToRil(pSendIndexer);
386 m_pCdmaSmsSender->ResendTextDelivery(pSendIndexer);
387 m_pCdmaSmsSender->ResendDataDelivery(pSendIndexer);
388
389 std::unique_ptr<CdmaTransportMsg> transMsg = std::make_unique<CdmaTransportMsg>();
390 transMsg->type = GetEnumRandom_CdmaTransportMsgType();
391
392 m_pCdmaSmsSender->SetConcact(pSendIndexer, transMsg);
393 }
TestGetOrSimpleCall()394 void TestGetOrSimpleCall()
395 {
396 bool bIsSupported;
397 std::shared_ptr<SmsReceiveIndexer> pRecvIndexer;
398 m_pCdmaSmsSender->IsImsSmsSupported(g_slotId, bIsSupported);
399 m_pCdmaSmsSender->ReceiveStatusReport(pRecvIndexer);
400 m_pCdmaSmsSender->RegisterImsHandler();
401 m_pCdmaSmsSender->GetSeqNum();
402 m_pCdmaSmsSender->GetSubmitMsgId();
403 }
EncodeMsg()404 void EncodeMsg()
405 {
406 CdmaTransportMsg transMsg;
407 transMsg.type = GetEnumRandom_CdmaTransportMsgType();
408 m_pCdmaSmsSender->EncodeMsg(transMsg);
409 }
410 private:
411 std::unique_ptr<CdmaSmsSender> m_pCdmaSmsSender;
412 };
413
414 class CdmaSmsReceiveHandleFuzzer final : public Fuzzer {
415 public:
416 using Fuzzer::Fuzzer;
~CdmaSmsReceiveHandleFuzzer()417 ~CdmaSmsReceiveHandleFuzzer() final {}
418 public:
StartFuzzerTest()419 void StartFuzzerTest() override
420 {
421 if (!CreateObject()) {
422 return;
423 }
424 TestHandleSmsAndSendCBB();
425 TestReplySmsToSmsc();
426 TestTransformMessageInfo();
427 DestoryObject();
428 }
429 protected:
CreateObject()430 bool CreateObject()
431 {
432 m_pCdmaSmsReceiveHandler = std::make_unique<CdmaSmsReceiveHandler>(g_slotId);
433 m_pCdmaSmsReceiveHandler->Init();
434 return m_pCdmaSmsReceiveHandler != nullptr;
435 }
DestoryObject()436 void DestoryObject()
437 {
438 m_pCdmaSmsReceiveHandler->UnRegisterHandler();
439 m_pCdmaSmsReceiveHandler.reset();
440 }
TestHandleSmsAndSendCBB()441 void TestHandleSmsAndSendCBB()
442 {
443 SmsTeleSvcUserData userData;
444 std::vector<UserDataHeadType> vectUserDataHeadType = {
445 UserDataHeadType::UDH_CONCAT_8BIT,
446 UserDataHeadType::UDH_CONCAT_16BIT
447 };
448
449 GetDataRange((char*)&userData.userData.data, userData.userData.length, m_nDataRangeMin, m_nDataRangeMax);
450 userData.userData.headerCnt = 1;
451 userData.userData.header[0].udhType = GetEnumRandom(vectUserDataHeadType);
452
453 std::shared_ptr<CdmaSmsMessage> smsBaseMessage = std::make_shared<CdmaSmsMessage>();
454 smsBaseMessage->AnalsisHeader(userData);
455 smsBaseMessage->messageId_ = 1;
456 smsBaseMessage->serviceCategory_ = 1;
457 smsBaseMessage->language_ =1;
458 smsBaseMessage-> visibleMessageBody_ ="123";
459
460 m_pCdmaSmsReceiveHandler->HandleSmsOtherSvcid(smsBaseMessage);
461 m_pCdmaSmsReceiveHandler->SendCBBroadcast(smsBaseMessage);
462 }
TestReplySmsToSmsc()463 void TestReplySmsToSmsc()
464 {
465 int nResult = AckIncomeCause::SMS_ACK_RESULT_OK;
466 m_pCdmaSmsReceiveHandler->ReplySmsToSmsc(nResult);
467 }
TestTransformMessageInfo()468 void TestTransformMessageInfo()
469 {
470 std::shared_ptr<SmsMessageInfo> info;
471 m_pCdmaSmsReceiveHandler->TransformMessageInfo(info);
472 info = std::make_shared<SmsMessageInfo>();
473 info->pdu = GetPduVect();
474 m_pCdmaSmsReceiveHandler->TransformMessageInfo(info);
475 }
476 private:
477 std::unique_ptr<CdmaSmsReceiveHandler> m_pCdmaSmsReceiveHandler;
478 int m_nDataRangeMin = 2;
479 int m_nDataRangeMax = MAX_USER_DATA_LEN;
480 };
481
482 class CdmaSmsMessageFuzzer final : public Fuzzer {
483 public:
484 using Fuzzer::Fuzzer;
~CdmaSmsMessageFuzzer()485 ~CdmaSmsMessageFuzzer() final {}
486 public:
StartFuzzerTest()487 void StartFuzzerTest() override
488 {
489 if (!CreateObject()) {
490 return;
491 }
492 TestCovertEncodingType();
493 TestCreateMessage();
494 TestAnalysisP2pMsg();
495 TestAnalsisUserData();
496 TestIsOrGet();
497 DestoryObject();
498 }
499 protected:
CreateObject()500 bool CreateObject()
501 {
502 m_pCdmaSmsMessage = std::make_unique<CdmaSmsMessage>();
503 return m_pCdmaSmsMessage != nullptr;
504 }
DestoryObject()505 void DestoryObject()
506 {
507 m_pCdmaSmsMessage.reset();
508 }
TestCovertEncodingType()509 void TestCovertEncodingType()
510 {
511 DataCodingScheme data = GetEnumRandom_DataCodingScheme();
512 m_pCdmaSmsMessage->CovertEncodingType(data);
513 }
TestCreateMessage()514 void TestCreateMessage()
515 {
516 std::vector<uint8_t> vectUint8 = GetPduVect();
517 std::string pduHex = StringUtils::StringToHex(vectUint8);
518 m_pCdmaSmsMessage->CreateMessage(pduHex);
519 }
TestAnalysisP2pMsg()520 void TestAnalysisP2pMsg()
521 {
522 CdmaP2PMsg p2pMsg;
523
524 p2pMsg.teleserviceId = static_cast<uint16_t>(GetEnumRandom_SmsTransTelsvcId());
525 p2pMsg.telesvcMsg.type = GetEnumRandom_TeleserviceMsgType();
526 m_pCdmaSmsMessage->AnalysisP2pMsg(p2pMsg);
527 }
TestAnalsisUserData()528 void TestAnalsisUserData()
529 {
530 SmsTeleSvcUserData userData;
531 userData.encodeType = GetEnumRandom_SmsEncodingType();
532 GetDataRange(userData.userData.data, userData.userData.length, 0, nMaxSmsUDPackageDataLen);
533 m_pCdmaSmsMessage->AnalsisUserData(userData);
534 }
TestIsOrGet()535 void TestIsOrGet()
536 {
537 m_pCdmaSmsMessage->GetTransTeleService();
538 m_pCdmaSmsMessage->GetProtocolId();
539 m_pCdmaSmsMessage->IsReplaceMessage();
540 m_pCdmaSmsMessage->IsCphsMwi();
541 m_pCdmaSmsMessage->IsWapPushMsg();
542 m_pCdmaSmsMessage->GetSpecialSmsInd();
543 m_pCdmaSmsMessage->IsStatusReport();
544 m_pCdmaSmsMessage->GetDestPort();
545 m_pCdmaSmsMessage->IsBroadcastMsg();
546 m_pCdmaSmsMessage->GetCMASCategory();
547 m_pCdmaSmsMessage->GetCMASResponseType();
548 m_pCdmaSmsMessage->GetCMASSeverity();
549 m_pCdmaSmsMessage->GetCMASUrgency();
550 m_pCdmaSmsMessage->GetCMASCertainty();
551 m_pCdmaSmsMessage->GetCMASMessageClass();
552 m_pCdmaSmsMessage->IsCMAS();
553 m_pCdmaSmsMessage->GetMessageId();
554 m_pCdmaSmsMessage->GetFormat();
555 m_pCdmaSmsMessage->GetLanguage();
556 m_pCdmaSmsMessage->GetCbInfo();
557 m_pCdmaSmsMessage->GetPriority();
558 m_pCdmaSmsMessage->IsEmergencyMsg();
559 m_pCdmaSmsMessage->GetServiceCategoty();
560 m_pCdmaSmsMessage->GetGeoScope();
561 m_pCdmaSmsMessage->GetReceTime();
562 }
563 private:
564 const int nMaxSmsUDPackageDataLen = MAX_USER_DATA_LEN;
565 std::unique_ptr<CdmaSmsMessage> m_pCdmaSmsMessage;
566 };
567 } // namespace OHOS
568
569 template<typename TY>
RunFuzzer(const uint8_t * data,size_t size)570 void RunFuzzer(const uint8_t* data, size_t size)
571 {
572 if (data == nullptr || size == 0) {
573 return;
574 }
575 std::unique_ptr<OHOS::Fuzzer> p = std::make_unique<TY>(data, size);
576 p->StartFuzzerTest();
577 }
578
579 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)580 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
581 {
582 /* Run your code on data */
583 OHOS::AddSmsTokenFuzzer token;
584
585 RunFuzzer<OHOS::MmsApnInfoFuzzer>(data, size);
586 RunFuzzer<OHOS::MmsNetworkClientFuzzer>(data, size);
587 RunFuzzer<OHOS::MmsPersistHelperFuzzer>(data, size);
588 RunFuzzer<OHOS::MmsConnCallbackStubFuzzer>(data, size);
589 return 0;
590 }