1518678f8Sopenharmony_ci/* 2518678f8Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd. 3518678f8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4518678f8Sopenharmony_ci * you may not use this file except in compliance with the License. 5518678f8Sopenharmony_ci * You may obtain a copy of the License at 6518678f8Sopenharmony_ci * 7518678f8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8518678f8Sopenharmony_ci * 9518678f8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10518678f8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11518678f8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12518678f8Sopenharmony_ci * See the License for the specific language governing permissions and 13518678f8Sopenharmony_ci * limitations under the License. 14518678f8Sopenharmony_ci */ 15518678f8Sopenharmony_ci 16518678f8Sopenharmony_ci#include "dhcpargument_fuzzer.h" 17518678f8Sopenharmony_ci 18518678f8Sopenharmony_ci#include <cstddef> 19518678f8Sopenharmony_ci#include <cstdint> 20518678f8Sopenharmony_ci#include <unistd.h> 21518678f8Sopenharmony_ci#include "securec.h" 22518678f8Sopenharmony_ci#include "dhcp_argument.h" 23518678f8Sopenharmony_ci 24518678f8Sopenharmony_cinamespace OHOS { 25518678f8Sopenharmony_cinamespace Wifi { 26518678f8Sopenharmony_ciconstexpr size_t DHCP_SLEEP_1 = 2; 27518678f8Sopenharmony_ciconstexpr size_t U32_AT_SIZE_ZERO = 4; 28518678f8Sopenharmony_ci 29518678f8Sopenharmony_civoid HasArgumentTest(const uint8_t* data, size_t size) 30518678f8Sopenharmony_ci{ 31518678f8Sopenharmony_ci const char *argument = "TEXT"; 32518678f8Sopenharmony_ci HasArgument(argument); 33518678f8Sopenharmony_ci} 34518678f8Sopenharmony_ci 35518678f8Sopenharmony_civoid GetArgumentTest(const uint8_t* data, size_t size) 36518678f8Sopenharmony_ci{ 37518678f8Sopenharmony_ci const char *name = "TEXT"; 38518678f8Sopenharmony_ci GetArgument(name); 39518678f8Sopenharmony_ci} 40518678f8Sopenharmony_ci 41518678f8Sopenharmony_civoid PutArgumentTest(const uint8_t* data, size_t size) 42518678f8Sopenharmony_ci{ 43518678f8Sopenharmony_ci const char *argument = "TEXT"; 44518678f8Sopenharmony_ci const char *val = "TEXT"; 45518678f8Sopenharmony_ci PutArgument(argument, val); 46518678f8Sopenharmony_ci} 47518678f8Sopenharmony_ci 48518678f8Sopenharmony_civoid ParseArgumentsTest(const uint8_t* data, size_t size) 49518678f8Sopenharmony_ci{ 50518678f8Sopenharmony_ci std::string ifName = std::string(reinterpret_cast<const char*>(data), size); 51518678f8Sopenharmony_ci std::string netMask = std::string(reinterpret_cast<const char*>(data), size); 52518678f8Sopenharmony_ci std::string ipRange = std::string(reinterpret_cast<const char*>(data), size); 53518678f8Sopenharmony_ci std::string localIp = std::string(reinterpret_cast<const char*>(data), size); 54518678f8Sopenharmony_ci ParseArguments(ifName, netMask, ipRange, localIp); 55518678f8Sopenharmony_ci} 56518678f8Sopenharmony_ci 57518678f8Sopenharmony_civoid FreeArgumentsTest(const uint8_t* data, size_t size) 58518678f8Sopenharmony_ci{ 59518678f8Sopenharmony_ci FreeArguments(); 60518678f8Sopenharmony_ci} 61518678f8Sopenharmony_ci 62518678f8Sopenharmony_civoid ShowHelpTest(const uint8_t* data, size_t size) 63518678f8Sopenharmony_ci{ 64518678f8Sopenharmony_ci int index = 0; 65518678f8Sopenharmony_ci int argc = static_cast<int>(data[index++]); 66518678f8Sopenharmony_ci ShowHelp(argc); 67518678f8Sopenharmony_ci} 68518678f8Sopenharmony_ci 69518678f8Sopenharmony_civoid PrintRequiredArgumentsTest(const uint8_t* data, size_t size) 70518678f8Sopenharmony_ci{ 71518678f8Sopenharmony_ci PrintRequiredArguments(); 72518678f8Sopenharmony_ci} 73518678f8Sopenharmony_ci 74518678f8Sopenharmony_ci/* Fuzzer entry point */ 75518678f8Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 76518678f8Sopenharmony_ci{ 77518678f8Sopenharmony_ci if ((data == nullptr) || (size <= OHOS::Wifi::U32_AT_SIZE_ZERO)) { 78518678f8Sopenharmony_ci return 0; 79518678f8Sopenharmony_ci } 80518678f8Sopenharmony_ci sleep(DHCP_SLEEP_1); 81518678f8Sopenharmony_ci OHOS::Wifi::HasArgumentTest(data, size); 82518678f8Sopenharmony_ci OHOS::Wifi::GetArgumentTest(data, size); 83518678f8Sopenharmony_ci OHOS::Wifi::PutArgumentTest(data, size); 84518678f8Sopenharmony_ci OHOS::Wifi::ParseArgumentsTest(data, size); 85518678f8Sopenharmony_ci OHOS::Wifi::FreeArgumentsTest(data, size); 86518678f8Sopenharmony_ci OHOS::Wifi::ShowHelpTest(data, size); 87518678f8Sopenharmony_ci OHOS::Wifi::PrintRequiredArgumentsTest(data, size); 88518678f8Sopenharmony_ci return 0; 89518678f8Sopenharmony_ci} 90518678f8Sopenharmony_ci} // namespace Wifi 91518678f8Sopenharmony_ci} // namespace OHOS 92