15c735df2Sopenharmony_ci/* 25c735df2Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 35c735df2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 45c735df2Sopenharmony_ci * you may not use this file except in compliance with the License. 55c735df2Sopenharmony_ci * You may obtain a copy of the License at 65c735df2Sopenharmony_ci * 75c735df2Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 85c735df2Sopenharmony_ci * 95c735df2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 105c735df2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 115c735df2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 125c735df2Sopenharmony_ci * See the License for the specific language governing permissions and 135c735df2Sopenharmony_ci * limitations under the License. 145c735df2Sopenharmony_ci */ 155c735df2Sopenharmony_ci 165c735df2Sopenharmony_ci#include "gnssability_fuzzer.h" 175c735df2Sopenharmony_ci 185c735df2Sopenharmony_ci#include "if_system_ability_manager.h" 195c735df2Sopenharmony_ci#include "iservice_registry.h" 205c735df2Sopenharmony_ci#include "message_option.h" 215c735df2Sopenharmony_ci#include "message_parcel.h" 225c735df2Sopenharmony_ci#include "system_ability_definition.h" 235c735df2Sopenharmony_ci#include "locator_ability.h" 245c735df2Sopenharmony_ci#include "locationhub_ipc_interface_code.h" 255c735df2Sopenharmony_ci#include "accesstoken_kit.h" 265c735df2Sopenharmony_ci#include "nativetoken_kit.h" 275c735df2Sopenharmony_ci#include "token_setproc.h" 285c735df2Sopenharmony_ci 295c735df2Sopenharmony_ci#ifdef FEATURE_GNSS_SUPPORT 305c735df2Sopenharmony_ci#include "gnss_ability.h" 315c735df2Sopenharmony_ci#endif 325c735df2Sopenharmony_ci#include "permission_manager.h" 335c735df2Sopenharmony_ci#include "work_record_statistic.h" 345c735df2Sopenharmony_ci 355c735df2Sopenharmony_cinamespace OHOS { 365c735df2Sopenharmony_ciusing namespace OHOS::Location; 375c735df2Sopenharmony_ciconst int32_t MAX_MEM_SIZE = 4 * 1024 * 1024; 385c735df2Sopenharmony_ciconst int32_t SLEEP_TIMES = 1000; 395c735df2Sopenharmony_ciconst int32_t LOCATION_PERM_NUM = 4; 405c735df2Sopenharmony_civoid MockNativePermission() 415c735df2Sopenharmony_ci{ 425c735df2Sopenharmony_ci const char *perms[] = { 435c735df2Sopenharmony_ci ACCESS_LOCATION.c_str(), ACCESS_APPROXIMATELY_LOCATION.c_str(), 445c735df2Sopenharmony_ci ACCESS_BACKGROUND_LOCATION.c_str(), MANAGE_SECURE_SETTINGS.c_str(), 455c735df2Sopenharmony_ci }; 465c735df2Sopenharmony_ci NativeTokenInfoParams infoInstance = { 475c735df2Sopenharmony_ci .dcapsNum = 0, 485c735df2Sopenharmony_ci .permsNum = LOCATION_PERM_NUM, 495c735df2Sopenharmony_ci .aclsNum = 0, 505c735df2Sopenharmony_ci .dcaps = nullptr, 515c735df2Sopenharmony_ci .perms = perms, 525c735df2Sopenharmony_ci .acls = nullptr, 535c735df2Sopenharmony_ci .processName = "GnssAbility_FuzzTest", 545c735df2Sopenharmony_ci .aplStr = "system_basic", 555c735df2Sopenharmony_ci }; 565c735df2Sopenharmony_ci auto tokenId = GetAccessTokenId(&infoInstance); 575c735df2Sopenharmony_ci SetSelfTokenID(tokenId); 585c735df2Sopenharmony_ci Security::AccessToken::AccessTokenKit::ReloadNativeTokenInfo(); 595c735df2Sopenharmony_ci LocatorAbility::GetInstance()->EnableAbility(true); 605c735df2Sopenharmony_ci} 615c735df2Sopenharmony_ci 625c735df2Sopenharmony_cichar* ParseData(const uint8_t* data, size_t size) 635c735df2Sopenharmony_ci{ 645c735df2Sopenharmony_ci if (data == nullptr) { 655c735df2Sopenharmony_ci return nullptr; 665c735df2Sopenharmony_ci } 675c735df2Sopenharmony_ci 685c735df2Sopenharmony_ci if (size > MAX_MEM_SIZE) { 695c735df2Sopenharmony_ci return nullptr; 705c735df2Sopenharmony_ci } 715c735df2Sopenharmony_ci 725c735df2Sopenharmony_ci char* ch = (char *)malloc(size + 1); 735c735df2Sopenharmony_ci if (ch == nullptr) { 745c735df2Sopenharmony_ci return nullptr; 755c735df2Sopenharmony_ci } 765c735df2Sopenharmony_ci 775c735df2Sopenharmony_ci (void)memset_s(ch, size + 1, 0x00, size + 1); 785c735df2Sopenharmony_ci if (memcpy_s(ch, size, data, size) != EOK) { 795c735df2Sopenharmony_ci free(ch); 805c735df2Sopenharmony_ci ch = nullptr; 815c735df2Sopenharmony_ci return nullptr; 825c735df2Sopenharmony_ci } 835c735df2Sopenharmony_ci return ch; 845c735df2Sopenharmony_ci} 855c735df2Sopenharmony_ci 865c735df2Sopenharmony_ci#ifdef FEATURE_GNSS_SUPPORT 875c735df2Sopenharmony_cibool GnssAbility001FuzzTest(const char* data, size_t size) 885c735df2Sopenharmony_ci{ 895c735df2Sopenharmony_ci MessageParcel requestParcel; 905c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 915c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 925c735df2Sopenharmony_ci requestParcel.RewindRead(0); 935c735df2Sopenharmony_ci MessageParcel reply; 945c735df2Sopenharmony_ci MessageOption option; 955c735df2Sopenharmony_ci 965c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 975c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::SET_MOCKED_LOCATIONS), 985c735df2Sopenharmony_ci requestParcel, reply, option); 995c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 1005c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 1015c735df2Sopenharmony_ci return true; 1025c735df2Sopenharmony_ci} 1035c735df2Sopenharmony_ci 1045c735df2Sopenharmony_cibool GnssAbility002FuzzTest(const char* data, size_t size) 1055c735df2Sopenharmony_ci{ 1065c735df2Sopenharmony_ci MessageParcel requestParcel; 1075c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 1085c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 1095c735df2Sopenharmony_ci requestParcel.RewindRead(0); 1105c735df2Sopenharmony_ci MessageParcel reply; 1115c735df2Sopenharmony_ci MessageOption option; 1125c735df2Sopenharmony_ci 1135c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 1145c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::SEND_LOCATION_REQUEST), 1155c735df2Sopenharmony_ci requestParcel, reply, option); 1165c735df2Sopenharmony_ci 1175c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 1185c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 1195c735df2Sopenharmony_ci return true; 1205c735df2Sopenharmony_ci} 1215c735df2Sopenharmony_ci 1225c735df2Sopenharmony_cibool GnssAbility003FuzzTest(const char* data, size_t size) 1235c735df2Sopenharmony_ci{ 1245c735df2Sopenharmony_ci MessageParcel requestParcel; 1255c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 1265c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 1275c735df2Sopenharmony_ci requestParcel.RewindRead(0); 1285c735df2Sopenharmony_ci MessageParcel reply; 1295c735df2Sopenharmony_ci MessageOption option; 1305c735df2Sopenharmony_ci 1315c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 1325c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::SET_ENABLE), 1335c735df2Sopenharmony_ci requestParcel, reply, option); 1345c735df2Sopenharmony_ci 1355c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 1365c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 1375c735df2Sopenharmony_ci return true; 1385c735df2Sopenharmony_ci} 1395c735df2Sopenharmony_ci 1405c735df2Sopenharmony_cibool GnssAbility004FuzzTest(const char* data, size_t size) 1415c735df2Sopenharmony_ci{ 1425c735df2Sopenharmony_ci MessageParcel requestParcel; 1435c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 1445c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 1455c735df2Sopenharmony_ci requestParcel.RewindRead(0); 1465c735df2Sopenharmony_ci MessageParcel reply; 1475c735df2Sopenharmony_ci MessageOption option; 1485c735df2Sopenharmony_ci 1495c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 1505c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::REFRESH_REQUESTS), 1515c735df2Sopenharmony_ci requestParcel, reply, option); 1525c735df2Sopenharmony_ci 1535c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 1545c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 1555c735df2Sopenharmony_ci return true; 1565c735df2Sopenharmony_ci} 1575c735df2Sopenharmony_ci 1585c735df2Sopenharmony_cibool GnssAbility005FuzzTest(const char* data, size_t size) 1595c735df2Sopenharmony_ci{ 1605c735df2Sopenharmony_ci MessageParcel requestParcel; 1615c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 1625c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 1635c735df2Sopenharmony_ci requestParcel.RewindRead(0); 1645c735df2Sopenharmony_ci MessageParcel reply; 1655c735df2Sopenharmony_ci MessageOption option; 1665c735df2Sopenharmony_ci 1675c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 1685c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::REG_GNSS_STATUS), 1695c735df2Sopenharmony_ci requestParcel, reply, option); 1705c735df2Sopenharmony_ci 1715c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 1725c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 1735c735df2Sopenharmony_ci return true; 1745c735df2Sopenharmony_ci} 1755c735df2Sopenharmony_ci 1765c735df2Sopenharmony_cibool GnssAbility006FuzzTest(const char* data, size_t size) 1775c735df2Sopenharmony_ci{ 1785c735df2Sopenharmony_ci MessageParcel requestParcel; 1795c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 1805c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 1815c735df2Sopenharmony_ci requestParcel.RewindRead(0); 1825c735df2Sopenharmony_ci MessageParcel reply; 1835c735df2Sopenharmony_ci MessageOption option; 1845c735df2Sopenharmony_ci 1855c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 1865c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::UNREG_GNSS_STATUS), 1875c735df2Sopenharmony_ci requestParcel, reply, option); 1885c735df2Sopenharmony_ci 1895c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 1905c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 1915c735df2Sopenharmony_ci return true; 1925c735df2Sopenharmony_ci} 1935c735df2Sopenharmony_ci 1945c735df2Sopenharmony_cibool GnssAbility007FuzzTest(const char* data, size_t size) 1955c735df2Sopenharmony_ci{ 1965c735df2Sopenharmony_ci MessageParcel requestParcel; 1975c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 1985c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 1995c735df2Sopenharmony_ci requestParcel.RewindRead(0); 2005c735df2Sopenharmony_ci MessageParcel reply; 2015c735df2Sopenharmony_ci MessageOption option; 2025c735df2Sopenharmony_ci 2035c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 2045c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::REG_NMEA), 2055c735df2Sopenharmony_ci requestParcel, reply, option); 2065c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 2075c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 2085c735df2Sopenharmony_ci return true; 2095c735df2Sopenharmony_ci} 2105c735df2Sopenharmony_ci 2115c735df2Sopenharmony_cibool GnssAbility008FuzzTest(const char* data, size_t size) 2125c735df2Sopenharmony_ci{ 2135c735df2Sopenharmony_ci MessageParcel requestParcel; 2145c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 2155c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 2165c735df2Sopenharmony_ci requestParcel.RewindRead(0); 2175c735df2Sopenharmony_ci MessageParcel reply; 2185c735df2Sopenharmony_ci MessageOption option; 2195c735df2Sopenharmony_ci 2205c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 2215c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::UNREG_NMEA), 2225c735df2Sopenharmony_ci requestParcel, reply, option); 2235c735df2Sopenharmony_ci 2245c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 2255c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 2265c735df2Sopenharmony_ci return true; 2275c735df2Sopenharmony_ci} 2285c735df2Sopenharmony_ci 2295c735df2Sopenharmony_cibool GnssAbility009FuzzTest(const char* data, size_t size) 2305c735df2Sopenharmony_ci{ 2315c735df2Sopenharmony_ci MessageParcel requestParcel; 2325c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 2335c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 2345c735df2Sopenharmony_ci requestParcel.RewindRead(0); 2355c735df2Sopenharmony_ci MessageParcel reply; 2365c735df2Sopenharmony_ci MessageOption option; 2375c735df2Sopenharmony_ci 2385c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 2395c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::REG_CACHED), 2405c735df2Sopenharmony_ci requestParcel, reply, option); 2415c735df2Sopenharmony_ci 2425c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 2435c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 2445c735df2Sopenharmony_ci return true; 2455c735df2Sopenharmony_ci} 2465c735df2Sopenharmony_ci 2475c735df2Sopenharmony_cibool GnssAbility010FuzzTest(const char* data, size_t size) 2485c735df2Sopenharmony_ci{ 2495c735df2Sopenharmony_ci MessageParcel requestParcel; 2505c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 2515c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 2525c735df2Sopenharmony_ci requestParcel.RewindRead(0); 2535c735df2Sopenharmony_ci MessageParcel reply; 2545c735df2Sopenharmony_ci MessageOption option; 2555c735df2Sopenharmony_ci 2565c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 2575c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::UNREG_CACHED), 2585c735df2Sopenharmony_ci requestParcel, reply, option); 2595c735df2Sopenharmony_ci 2605c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 2615c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 2625c735df2Sopenharmony_ci return true; 2635c735df2Sopenharmony_ci} 2645c735df2Sopenharmony_ci 2655c735df2Sopenharmony_cibool GnssAbility011FuzzTest(const char* data, size_t size) 2665c735df2Sopenharmony_ci{ 2675c735df2Sopenharmony_ci MessageParcel requestParcel; 2685c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 2695c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 2705c735df2Sopenharmony_ci requestParcel.RewindRead(0); 2715c735df2Sopenharmony_ci MessageParcel reply; 2725c735df2Sopenharmony_ci MessageOption option; 2735c735df2Sopenharmony_ci 2745c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 2755c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::GET_CACHED_SIZE), 2765c735df2Sopenharmony_ci requestParcel, reply, option); 2775c735df2Sopenharmony_ci 2785c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 2795c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 2805c735df2Sopenharmony_ci return true; 2815c735df2Sopenharmony_ci} 2825c735df2Sopenharmony_ci 2835c735df2Sopenharmony_cibool GnssAbility012FuzzTest(const char* data, size_t size) 2845c735df2Sopenharmony_ci{ 2855c735df2Sopenharmony_ci MessageParcel requestParcel; 2865c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 2875c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 2885c735df2Sopenharmony_ci requestParcel.RewindRead(0); 2895c735df2Sopenharmony_ci MessageParcel reply; 2905c735df2Sopenharmony_ci MessageOption option; 2915c735df2Sopenharmony_ci 2925c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 2935c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::FLUSH_CACHED), 2945c735df2Sopenharmony_ci requestParcel, reply, option); 2955c735df2Sopenharmony_ci 2965c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 2975c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 2985c735df2Sopenharmony_ci return true; 2995c735df2Sopenharmony_ci} 3005c735df2Sopenharmony_ci 3015c735df2Sopenharmony_cibool GnssAbility013FuzzTest(const char* data, size_t size) 3025c735df2Sopenharmony_ci{ 3035c735df2Sopenharmony_ci MessageParcel requestParcel; 3045c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 3055c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 3065c735df2Sopenharmony_ci requestParcel.RewindRead(0); 3075c735df2Sopenharmony_ci MessageParcel reply; 3085c735df2Sopenharmony_ci MessageOption option; 3095c735df2Sopenharmony_ci 3105c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 3115c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::SEND_COMMANDS), 3125c735df2Sopenharmony_ci requestParcel, reply, option); 3135c735df2Sopenharmony_ci 3145c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 3155c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 3165c735df2Sopenharmony_ci return true; 3175c735df2Sopenharmony_ci} 3185c735df2Sopenharmony_ci 3195c735df2Sopenharmony_cibool GnssAbility014FuzzTest(const char* data, size_t size) 3205c735df2Sopenharmony_ci{ 3215c735df2Sopenharmony_ci MessageParcel requestParcel; 3225c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 3235c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 3245c735df2Sopenharmony_ci requestParcel.RewindRead(0); 3255c735df2Sopenharmony_ci MessageParcel reply; 3265c735df2Sopenharmony_ci MessageOption option; 3275c735df2Sopenharmony_ci 3285c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 3295c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::ENABLE_LOCATION_MOCK), 3305c735df2Sopenharmony_ci requestParcel, reply, option); 3315c735df2Sopenharmony_ci 3325c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 3335c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 3345c735df2Sopenharmony_ci return true; 3355c735df2Sopenharmony_ci} 3365c735df2Sopenharmony_ci 3375c735df2Sopenharmony_cibool GnssAbility015FuzzTest(const char* data, size_t size) 3385c735df2Sopenharmony_ci{ 3395c735df2Sopenharmony_ci MessageParcel requestParcel; 3405c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 3415c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 3425c735df2Sopenharmony_ci requestParcel.RewindRead(0); 3435c735df2Sopenharmony_ci MessageParcel reply; 3445c735df2Sopenharmony_ci MessageOption option; 3455c735df2Sopenharmony_ci 3465c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 3475c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::DISABLE_LOCATION_MOCK), 3485c735df2Sopenharmony_ci requestParcel, reply, option); 3495c735df2Sopenharmony_ci 3505c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 3515c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 3525c735df2Sopenharmony_ci return true; 3535c735df2Sopenharmony_ci} 3545c735df2Sopenharmony_ci 3555c735df2Sopenharmony_cibool GnssAbility016FuzzTest(const char* data, size_t size) 3565c735df2Sopenharmony_ci{ 3575c735df2Sopenharmony_ci MessageParcel requestParcel; 3585c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 3595c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 3605c735df2Sopenharmony_ci requestParcel.RewindRead(0); 3615c735df2Sopenharmony_ci MessageParcel reply; 3625c735df2Sopenharmony_ci MessageOption option; 3635c735df2Sopenharmony_ci 3645c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 3655c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::ADD_FENCE_INFO), 3665c735df2Sopenharmony_ci requestParcel, reply, option); 3675c735df2Sopenharmony_ci 3685c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 3695c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 3705c735df2Sopenharmony_ci return true; 3715c735df2Sopenharmony_ci} 3725c735df2Sopenharmony_ci 3735c735df2Sopenharmony_cibool GnssAbility017FuzzTest(const char* data, size_t size) 3745c735df2Sopenharmony_ci{ 3755c735df2Sopenharmony_ci MessageParcel requestParcel; 3765c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 3775c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 3785c735df2Sopenharmony_ci requestParcel.RewindRead(0); 3795c735df2Sopenharmony_ci MessageParcel reply; 3805c735df2Sopenharmony_ci MessageOption option; 3815c735df2Sopenharmony_ci 3825c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 3835c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::REMOVE_FENCE_INFO), 3845c735df2Sopenharmony_ci requestParcel, reply, option); 3855c735df2Sopenharmony_ci 3865c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 3875c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 3885c735df2Sopenharmony_ci return true; 3895c735df2Sopenharmony_ci} 3905c735df2Sopenharmony_ci 3915c735df2Sopenharmony_cibool GnssAbility018FuzzTest(const char* data, size_t size) 3925c735df2Sopenharmony_ci{ 3935c735df2Sopenharmony_ci MessageParcel requestParcel; 3945c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 3955c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 3965c735df2Sopenharmony_ci requestParcel.RewindRead(0); 3975c735df2Sopenharmony_ci MessageParcel reply; 3985c735df2Sopenharmony_ci MessageOption option; 3995c735df2Sopenharmony_ci 4005c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 4015c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::ADD_GNSS_GEOFENCE), 4025c735df2Sopenharmony_ci requestParcel, reply, option); 4035c735df2Sopenharmony_ci 4045c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 4055c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 4065c735df2Sopenharmony_ci return true; 4075c735df2Sopenharmony_ci} 4085c735df2Sopenharmony_ci 4095c735df2Sopenharmony_cibool GnssAbility019FuzzTest(const char* data, size_t size) 4105c735df2Sopenharmony_ci{ 4115c735df2Sopenharmony_ci MessageParcel requestParcel; 4125c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 4135c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 4145c735df2Sopenharmony_ci requestParcel.RewindRead(0); 4155c735df2Sopenharmony_ci MessageParcel reply; 4165c735df2Sopenharmony_ci MessageOption option; 4175c735df2Sopenharmony_ci 4185c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 4195c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::REMOVE_GNSS_GEOFENCE), 4205c735df2Sopenharmony_ci requestParcel, reply, option); 4215c735df2Sopenharmony_ci 4225c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 4235c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 4245c735df2Sopenharmony_ci return true; 4255c735df2Sopenharmony_ci} 4265c735df2Sopenharmony_ci 4275c735df2Sopenharmony_cibool GnssAbility020FuzzTest(const char* data, size_t size) 4285c735df2Sopenharmony_ci{ 4295c735df2Sopenharmony_ci MessageParcel requestParcel; 4305c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 4315c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 4325c735df2Sopenharmony_ci requestParcel.RewindRead(0); 4335c735df2Sopenharmony_ci MessageParcel reply; 4345c735df2Sopenharmony_ci MessageOption option; 4355c735df2Sopenharmony_ci 4365c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 4375c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::GET_GEOFENCE_SUPPORT_COORDINATE_SYSTEM_TYPE), 4385c735df2Sopenharmony_ci requestParcel, reply, option); 4395c735df2Sopenharmony_ci 4405c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 4415c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 4425c735df2Sopenharmony_ci return true; 4435c735df2Sopenharmony_ci} 4445c735df2Sopenharmony_ci 4455c735df2Sopenharmony_cibool GnssAbility021FuzzTest(const char* data, size_t size) 4465c735df2Sopenharmony_ci{ 4475c735df2Sopenharmony_ci MessageParcel requestParcel; 4485c735df2Sopenharmony_ci requestParcel.WriteInterfaceToken(u"location.IGnssAbility"); 4495c735df2Sopenharmony_ci requestParcel.WriteBuffer(data, size); 4505c735df2Sopenharmony_ci requestParcel.RewindRead(0); 4515c735df2Sopenharmony_ci MessageParcel reply; 4525c735df2Sopenharmony_ci MessageOption option; 4535c735df2Sopenharmony_ci 4545c735df2Sopenharmony_ci auto ability = GnssAbility::GetInstance(); 4555c735df2Sopenharmony_ci ability->OnRemoteRequest(static_cast<uint32_t>(GnssInterfaceCode::SEND_NETWORK_LOCATION), 4565c735df2Sopenharmony_ci requestParcel, reply, option); 4575c735df2Sopenharmony_ci 4585c735df2Sopenharmony_ci std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIMES)); 4595c735df2Sopenharmony_ci WorkRecordStatistic::DestroyInstance(); 4605c735df2Sopenharmony_ci return true; 4615c735df2Sopenharmony_ci} 4625c735df2Sopenharmony_ci#endif 4635c735df2Sopenharmony_ci} // namespace OHOS 4645c735df2Sopenharmony_ci 4655c735df2Sopenharmony_ci/* Fuzzer entry point */ 4665c735df2Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 4675c735df2Sopenharmony_ci{ 4685c735df2Sopenharmony_ci OHOS::MockNativePermission(); 4695c735df2Sopenharmony_ci char* ch = OHOS::ParseData(data, size); 4705c735df2Sopenharmony_ci if (ch != nullptr) { 4715c735df2Sopenharmony_ci#ifdef FEATURE_GNSS_SUPPORT 4725c735df2Sopenharmony_ci OHOS::GnssAbility001FuzzTest(ch, size); 4735c735df2Sopenharmony_ci OHOS::GnssAbility002FuzzTest(ch, size); 4745c735df2Sopenharmony_ci OHOS::GnssAbility003FuzzTest(ch, size); 4755c735df2Sopenharmony_ci OHOS::GnssAbility004FuzzTest(ch, size); 4765c735df2Sopenharmony_ci OHOS::GnssAbility005FuzzTest(ch, size); 4775c735df2Sopenharmony_ci OHOS::GnssAbility006FuzzTest(ch, size); 4785c735df2Sopenharmony_ci OHOS::GnssAbility007FuzzTest(ch, size); 4795c735df2Sopenharmony_ci OHOS::GnssAbility008FuzzTest(ch, size); 4805c735df2Sopenharmony_ci OHOS::GnssAbility009FuzzTest(ch, size); 4815c735df2Sopenharmony_ci OHOS::GnssAbility010FuzzTest(ch, size); 4825c735df2Sopenharmony_ci OHOS::GnssAbility011FuzzTest(ch, size); 4835c735df2Sopenharmony_ci OHOS::GnssAbility012FuzzTest(ch, size); 4845c735df2Sopenharmony_ci OHOS::GnssAbility013FuzzTest(ch, size); 4855c735df2Sopenharmony_ci OHOS::GnssAbility014FuzzTest(ch, size); 4865c735df2Sopenharmony_ci OHOS::GnssAbility015FuzzTest(ch, size); 4875c735df2Sopenharmony_ci OHOS::GnssAbility016FuzzTest(ch, size); 4885c735df2Sopenharmony_ci OHOS::GnssAbility017FuzzTest(ch, size); 4895c735df2Sopenharmony_ci OHOS::GnssAbility018FuzzTest(ch, size); 4905c735df2Sopenharmony_ci OHOS::GnssAbility019FuzzTest(ch, size); 4915c735df2Sopenharmony_ci OHOS::GnssAbility020FuzzTest(ch, size); 4925c735df2Sopenharmony_ci OHOS::GnssAbility021FuzzTest(ch, size); 4935c735df2Sopenharmony_ci#endif 4945c735df2Sopenharmony_ci free(ch); 4955c735df2Sopenharmony_ci ch = nullptr; 4965c735df2Sopenharmony_ci } 4975c735df2Sopenharmony_ci return 0; 4985c735df2Sopenharmony_ci} 4995c735df2Sopenharmony_ci 500