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