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 }