• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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         TestSplitAndMatchApnTypes();
163         TestGetMmsApnValue();
164         DestoryObject();
165     }
166 protected:
CreateObject()167     bool CreateObject()
168     {
169         m_pMmsApnInfo = std::make_unique<MmsApnInfo>(g_slotId);
170         return m_pMmsApnInfo != nullptr;
171     }
DestoryObject()172     void DestoryObject()
173     {
174         m_pMmsApnInfo.reset();
175     }
TestSetMmscUrl()176     void TestSetMmscUrl()
177     {
178         std::string strUrl = GetString();
179         m_pMmsApnInfo->setMmscUrl(strUrl);
180     }
TestGetMmscUrl()181     void TestGetMmscUrl()
182     {
183         m_pMmsApnInfo->getMmscUrl();
184     }
TestSetMmsProxyAddressAndProxyPort()185     void TestSetMmsProxyAddressAndProxyPort()
186     {
187         std::string strUrl = GetString();
188         m_pMmsApnInfo->setMmsProxyAddressAndProxyPort(strUrl);
189     }
TestGetMmsProxyAddressAndProxyPort()190     void TestGetMmsProxyAddressAndProxyPort()
191     {
192         m_pMmsApnInfo->getMmsProxyAddressAndProxyPort();
193     }
TestSplitAndMatchApnTypes()194     void TestSplitAndMatchApnTypes()
195     {
196         std::string apn = GetString();
197         m_pMmsApnInfo->SplitAndMatchApnTypes(apn);
198         apn += ",mms";
199         m_pMmsApnInfo->SplitAndMatchApnTypes(apn);
200     }
TestGetMmsApnValue()201     void TestGetMmsApnValue()
202     {
203         int count = 0;
204         std::string homeUrlVal = GetString();
205         std::string mmsIPAddressVal = GetString();
206         m_pMmsApnInfo->GetMmsApnValue(nullptr, count, homeUrlVal, mmsIPAddressVal);
207     }
208 private:
209     std::unique_ptr<MmsApnInfo> m_pMmsApnInfo;
210 };
211 
212 /*
213 * services/mms/include/mms_network_client.h
214 * services/mms/mms_network_client.cpp
215 */
216 class MmsNetworkClientFuzzer final : public Fuzzer {
217 public:
218     using Fuzzer::Fuzzer;
~MmsNetworkClientFuzzer()219     ~MmsNetworkClientFuzzer() final {}
220 public:
StartFuzzerTest()221     void StartFuzzerTest() override
222     {
223         if (!CreateObject()) {
224             return;
225         }
226         TestExecutePost();
227         TestExecuteGet();
228         TestGetMmsDataBuf();
229         TestCheckSendConf();
230         TestGetCoverUrl();
231         TestUpdateMmsPduToStorage();
232         TestGetMmsPduFromFile();
233         TestGetMmsPduFromDataBase();
234         TestDeleteMmsPdu();
235         TestWriteBufferToFile();
236         DestoryObject();
237     }
238 protected:
CreateObject()239     bool CreateObject()
240     {
241         m_pMmsNetworkClient = std::make_unique<MmsNetworkClient>(g_slotId);
242         return m_pMmsNetworkClient != nullptr;
243     }
DestoryObject()244     void DestoryObject()
245     {
246         m_pMmsNetworkClient.reset();
247     }
TestExecutePost()248     void TestExecutePost()
249     {
250         std::string  strNormalUrl = "www.baidu.com";
251         std::string  strBadUrl = GetString(30);
252         std::string  strPostData = GetString(256);
253         m_pMmsNetworkClient->Execute("POST", strNormalUrl, strPostData, "ua", "uaprof");
254         m_pMmsNetworkClient->Execute("POST", strBadUrl, strPostData, "ua", "uaprof");
255     }
TestExecuteGet()256     void TestExecuteGet()
257     {
258         std::string  strNormalUrl = "www.baidu.com";
259         std::string  strBadUrl = GetString(30);
260         std::string  strPostData = GetString(256);
261         m_pMmsNetworkClient->Execute("GET", strNormalUrl, strPostData, "ua", "uaprof");
262         m_pMmsNetworkClient->Execute("GET", strBadUrl, strPostData, "ua", "uaprof");
263     }
TestGetMmsDataBuf()264     void TestGetMmsDataBuf()
265     {
266         std::string  fileName = "www.baidu.com";
267         std::string  strBuf = GetString(256);
268         m_pMmsNetworkClient->GetMmsDataBuf(strBuf, fileName);
269     }
TestCheckSendConf()270     void TestCheckSendConf()
271     {
272         m_pMmsNetworkClient->CheckSendConf();
273     }
TestGetCoverUrl()274     void TestGetCoverUrl()
275     {
276         std::string emptyStr;
277         m_pMmsNetworkClient->GetCoverUrl(emptyStr);
278         std::string str = GetString(20);
279         m_pMmsNetworkClient->GetCoverUrl(str);
280     }
TestUpdateMmsPduToStorage()281     void TestUpdateMmsPduToStorage()
282     {
283         std::string storeDirName = GetString(20);
284         m_pMmsNetworkClient->UpdateMmsPduToStorage(storeDirName);
285     }
TestGetMmsPduFromFile()286     void TestGetMmsPduFromFile()
287     {
288         std::string fileName = GetString(20);
289         std::string strBuf = GetString(20);
290         m_pMmsNetworkClient->GetMmsPduFromFile(fileName, strBuf);
291     }
TestGetMmsPduFromDataBase()292     void TestGetMmsPduFromDataBase()
293     {
294         std::string dbUrl = GetString(20);
295         std::string strBuf = GetString(20);
296         m_pMmsNetworkClient->GetMmsPduFromDataBase(dbUrl, strBuf);
297     }
TestDeleteMmsPdu()298     void TestDeleteMmsPdu()
299     {
300         std::string dbUrl = GetString(20);
301         m_pMmsNetworkClient->DeleteMmsPdu(dbUrl);
302     }
TestWriteBufferToFile()303     void TestWriteBufferToFile()
304     {
305         std::unique_ptr<char[]> bufp = std::make_unique<char[]>(g_size);
306         std::string strPathName = GetString(20);
307         m_pMmsNetworkClient->WriteBufferToFile(bufp, g_size, strPathName);
308     }
309 private:
310     std::unique_ptr<MmsNetworkClient> m_pMmsNetworkClient;
311 };
312 
313 class MmsPersistHelperFuzzer final : public Fuzzer {
314 public:
315     using Fuzzer::Fuzzer;
~MmsPersistHelperFuzzer()316     ~MmsPersistHelperFuzzer() final {}
317 public:
StartFuzzerTest()318     void StartFuzzerTest() override
319     {
320         if (!CreateObject()) {
321             return;
322         }
323         TestMakeUrl();
324         TestInsert();
325         TestGet();
326         TestDelete();
327         TestGet();
328         TestSetMmsPdu();
329         TestSplitPdu();
330         TestSplitUrl();
331         DestoryObject();
332     }
333 protected:
CreateObject()334     bool CreateObject()
335     {
336         m_pMmsPersistHelper = std::make_unique<MmsPersistHelper>();
337         return m_pMmsPersistHelper != nullptr;
338     }
DestoryObject()339     void DestoryObject()
340     {
341         m_pMmsPersistHelper.reset();
342     }
TestMakeUrl()343     void TestMakeUrl()
344     {
345         std::string strUrl = GetString();
346     }
TestInsert()347     void TestInsert()
348     {
349         std::string strMmsPdu = GetString();
350         m_pMmsPersistHelper->InsertMmsPdu(strMmsPdu, m_strUrl);
351     }
TestGet()352     void TestGet()
353     {
354         m_pMmsPersistHelper->GetMmsPdu(m_strUrl);
355     }
TestDelete()356     void TestDelete()
357     {
358         m_pMmsPersistHelper->DeleteMmsPdu(m_strUrl);
359     }
TestSetMmsPdu()360     void TestSetMmsPdu()
361     {
362         std::string mmsPdu = GetString(100);
363         m_pMmsPersistHelper->SetMmsPdu(mmsPdu);
364     }
TestSplitPdu()365     void TestSplitPdu()
366     {
367         std::string mmsPdu = StringUtils::StringToHex(GetString(100));
368         m_pMmsPersistHelper->SplitPdu(mmsPdu);
369     }
TestSplitUrl()370     void TestSplitUrl()
371     {
372         std::string url = GetString(100);
373         m_pMmsPersistHelper->SplitUrl(url);
374         url += ",fuzzer";
375         m_pMmsPersistHelper->SplitUrl(url);
376     }
377 private:
378     std::string                       m_strUrl;
379     std::unique_ptr<MmsPersistHelper> m_pMmsPersistHelper;
380 };
381 
382 class MmsConnCallbackStubFuzzer final : public Fuzzer {
383 public:
384     using Fuzzer::Fuzzer;
~MmsConnCallbackStubFuzzer()385     ~MmsConnCallbackStubFuzzer() final {}
386 public:
StartFuzzerTest()387     void StartFuzzerTest() override
388     {
389         if (!CreateObject()) {
390             return;
391         }
392         TestNetAvailable();
393         DestoryObject();
394     }
395 protected:
CreateObject()396     bool CreateObject()
397     {
398         m_pMmsConnCallbackStub = std::make_unique<MmsConnCallbackStub>();
399         return m_pMmsConnCallbackStub != nullptr;
400     }
DestoryObject()401     void DestoryObject()
402     {
403         m_pMmsConnCallbackStub.reset();
404     }
TestNetAvailable()405     void TestNetAvailable()
406     {
407         sptr<NetManagerStandard::NetHandle> pNetHandle;
408         sptr<NetManagerStandard::NetAllCapabilities> pNetAllCap;
409         sptr<NetManagerStandard::NetLinkInfo> pNetLinkInfo;
410 
411         m_pMmsConnCallbackStub->NetAvailable(pNetHandle);
412         m_pMmsConnCallbackStub->NetCapabilitiesChange(pNetHandle, pNetAllCap);
413         m_pMmsConnCallbackStub->NetConnectionPropertiesChange(pNetHandle, pNetLinkInfo);
414         m_pMmsConnCallbackStub->NetLost(pNetHandle);
415         m_pMmsConnCallbackStub->NetUnavailable();
416         m_pMmsConnCallbackStub->NetBlockStatusChange(pNetHandle, false);
417     }
418 private:
419     std::unique_ptr<MmsConnCallbackStub> m_pMmsConnCallbackStub;
420 };
421 
422 class CdmaSmsSenderFuzzer final : public Fuzzer {
423 public:
424     using Fuzzer::Fuzzer;
~CdmaSmsSenderFuzzer()425     ~CdmaSmsSenderFuzzer() final {}
426 public:
StartFuzzerTest()427     void StartFuzzerTest() override
428     {
429         if (!CreateObject()) {
430             return;
431         }
432         TestTextBasedSmsDeliveryViaIms();
433         TestSendSmsToRil();
434         TestGetOrSimpleCall();
435         EncodeMsg();
436         DestoryObject();
437     }
438 protected:
CreateObject()439     bool CreateObject()
440     {
441         m_pCdmaSmsSender = std::make_unique<CdmaSmsSender>(g_slotId, &CdmaSmsSenderFuzzer::SendRetryFunc);
442         m_pCdmaSmsSender->Init();
443         return m_pCdmaSmsSender != nullptr;
444     }
DestoryObject()445     void DestoryObject()
446     {
447         m_pCdmaSmsSender.reset();
448     }
SendRetryFunc(std::shared_ptr<SmsSendIndexer> index)449     static void SendRetryFunc(std::shared_ptr<SmsSendIndexer> index) {}
TestTextBasedSmsDeliveryViaIms()450     void TestTextBasedSmsDeliveryViaIms()
451     {
452         std::string strScAddr = GetString(MAX_ADDRESS_LEN-1);
453         std::string strDtAddr = GetString(MAX_ADDRESS_LEN-1);
454         std::string strText = GetString();
455         size_t      nPort   = GetPort();
456         uint16_t dataBaseId = 0;
457         sptr<ISendShortMessageCallback> sendCallback = nullptr;
458         sptr<IDeliveryShortMessageCallback> deliveryCallback = nullptr;
459         bool isMmsApp = true;
460 
461         m_pCdmaSmsSender->TextBasedSmsDeliveryViaIms(strDtAddr, strScAddr, strText, sendCallback, deliveryCallback,
462             dataBaseId, isMmsApp);
463         m_pCdmaSmsSender->DataBasedSmsDeliveryViaIms(
464             strDtAddr, strScAddr, nPort, g_data, g_size, sendCallback, deliveryCallback);
465     }
TestSendSmsToRil()466     void TestSendSmsToRil()
467     {
468         std::string strScAddr = GetString(MAX_ADDRESS_LEN-1);
469         std::string strDtAddr = GetString(MAX_ADDRESS_LEN-1);
470         std::string strText = GetString();
471         sptr<ISendShortMessageCallback> sendCallback = nullptr;
472         sptr<IDeliveryShortMessageCallback> deliveryCallback = nullptr;
473         std::shared_ptr<SmsSendIndexer> pSendIndexer
474             = std::make_shared<SmsSendIndexer>(strDtAddr, strScAddr, strText,
475             sendCallback, deliveryCallback);
476 
477         m_pCdmaSmsSender->SendSmsToRil(pSendIndexer);
478         m_pCdmaSmsSender->ResendTextDelivery(nullptr);
479         m_pCdmaSmsSender->ResendTextDelivery(pSendIndexer);
480         m_pCdmaSmsSender->ResendDataDelivery(nullptr);
481         m_pCdmaSmsSender->ResendDataDelivery(pSendIndexer);
482 
483         std::unique_ptr<CdmaTransportMsg> transMsg = std::make_unique<CdmaTransportMsg>();
484         transMsg->type = GetEnumRandom_CdmaTransportMsgType();
485 
486         pSendIndexer->SetIsConcat(true);
487         m_pCdmaSmsSender->SetConcact(pSendIndexer, transMsg);
488     }
TestGetOrSimpleCall()489     void TestGetOrSimpleCall()
490     {
491         bool bIsSupported;
492         m_pCdmaSmsSender->IsImsSmsSupported(g_slotId, bIsSupported);
493         m_pCdmaSmsSender->GetSeqNum();
494         m_pCdmaSmsSender->GetSubmitMsgId();
495     }
EncodeMsg()496     void EncodeMsg()
497     {
498         CdmaTransportMsg transMsg;
499         transMsg.type = GetEnumRandom_CdmaTransportMsgType();
500         m_pCdmaSmsSender->EncodeMsg(transMsg);
501     }
502 private:
503     std::unique_ptr<CdmaSmsSender> m_pCdmaSmsSender;
504 };
505 
506 class CdmaSmsMessageFuzzer final : public Fuzzer {
507 public:
508     using Fuzzer::Fuzzer;
~CdmaSmsMessageFuzzer()509     ~CdmaSmsMessageFuzzer() final {}
510 public:
StartFuzzerTest()511     void StartFuzzerTest() override
512     {
513         if (!CreateObject()) {
514             return;
515         }
516         TestCovertEncodingType();
517         TestCreateMessage();
518         TestAnalysisP2pMsg();
519         TestAnalsisUserData();
520         TestIsOrGet();
521         DestoryObject();
522     }
523 protected:
CreateObject()524     bool CreateObject()
525     {
526         m_pCdmaSmsMessage = std::make_unique<CdmaSmsMessage>();
527         return m_pCdmaSmsMessage != nullptr;
528     }
DestoryObject()529     void DestoryObject()
530     {
531         m_pCdmaSmsMessage.reset();
532     }
TestCovertEncodingType()533     void TestCovertEncodingType()
534     {
535         DataCodingScheme data = GetEnumRandom_DataCodingScheme();
536         m_pCdmaSmsMessage->CovertEncodingType(data);
537     }
TestCreateMessage()538     void TestCreateMessage()
539     {
540         std::vector<uint8_t> vectUint8 = GetPduVect();
541         std::string pduHex = StringUtils::StringToHex(vectUint8);
542         m_pCdmaSmsMessage->CreateMessage(pduHex);
543     }
TestAnalysisP2pMsg()544     void TestAnalysisP2pMsg()
545     {
546         CdmaP2PMsg p2pMsg;
547 
548         p2pMsg.teleserviceId = static_cast<uint16_t>(GetEnumRandom_SmsTransTelsvcId());
549         p2pMsg.telesvcMsg.type = GetEnumRandom_TeleserviceMsgType();
550         m_pCdmaSmsMessage->AnalysisP2pMsg(p2pMsg);
551     }
TestAnalsisUserData()552     void TestAnalsisUserData()
553     {
554         SmsTeleSvcUserData userData;
555         userData.encodeType = GetEnumRandom_SmsEncodingType();
556         GetDataRange(userData.userData.data, userData.userData.length, 0, nMaxSmsUDPackageDataLen);
557         m_pCdmaSmsMessage->AnalsisUserData(userData);
558     }
TestIsOrGet()559     void TestIsOrGet()
560     {
561         m_pCdmaSmsMessage->GetTransTeleService();
562         m_pCdmaSmsMessage->GetProtocolId();
563         m_pCdmaSmsMessage->IsReplaceMessage();
564         m_pCdmaSmsMessage->IsCphsMwi();
565         m_pCdmaSmsMessage->IsWapPushMsg();
566         m_pCdmaSmsMessage->GetSpecialSmsInd();
567         m_pCdmaSmsMessage->GetDestPort();
568         m_pCdmaSmsMessage->IsBroadcastMsg();
569         m_pCdmaSmsMessage->GetCMASCategory();
570         m_pCdmaSmsMessage->GetCMASResponseType();
571         m_pCdmaSmsMessage->GetCMASSeverity();
572         m_pCdmaSmsMessage->GetCMASUrgency();
573         m_pCdmaSmsMessage->GetCMASCertainty();
574         m_pCdmaSmsMessage->GetCMASMessageClass();
575         m_pCdmaSmsMessage->IsCMAS();
576         m_pCdmaSmsMessage->GetMessageId();
577         m_pCdmaSmsMessage->GetFormat();
578         m_pCdmaSmsMessage->GetLanguage();
579         m_pCdmaSmsMessage->GetCbInfo();
580         m_pCdmaSmsMessage->GetPriority();
581         m_pCdmaSmsMessage->IsEmergencyMsg();
582         m_pCdmaSmsMessage->GetServiceCategoty();
583         m_pCdmaSmsMessage->GetGeoScope();
584         m_pCdmaSmsMessage->GetReceTime();
585     }
586 private:
587     const int nMaxSmsUDPackageDataLen = MAX_USER_DATA_LEN;
588     std::unique_ptr<CdmaSmsMessage> m_pCdmaSmsMessage;
589 };
590 }  // namespace OHOS
591 
592 template<typename TY>
RunFuzzer(const uint8_t * data,size_t size)593 void RunFuzzer(const uint8_t* data, size_t size)
594 {
595     if (data == nullptr || size == 0) {
596         return;
597     }
598     std::unique_ptr<OHOS::Fuzzer> p = std::make_unique<TY>(data, size);
599     p->StartFuzzerTest();
600 }
601 
602 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)603 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
604 {
605     /* Run your code on data */
606     OHOS::AddSmsTokenFuzzer token;
607 
608     RunFuzzer<OHOS::MmsApnInfoFuzzer>(data, size);
609     RunFuzzer<OHOS::MmsNetworkClientFuzzer>(data, size);
610     RunFuzzer<OHOS::MmsPersistHelperFuzzer>(data, size);
611     RunFuzzer<OHOS::MmsConnCallbackStubFuzzer>(data, size);
612     RunFuzzer<OHOS::CdmaSmsMessageFuzzer>(data, size);
613     RunFuzzer<OHOS::CdmaSmsSenderFuzzer>(data, size);
614     return 0;
615 }