13fc297bdSopenharmony_ci/* 23fc297bdSopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 33fc297bdSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 43fc297bdSopenharmony_ci * you may not use this file except in compliance with the License. 53fc297bdSopenharmony_ci * You may obtain a copy of the License at 63fc297bdSopenharmony_ci * 73fc297bdSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 83fc297bdSopenharmony_ci * 93fc297bdSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 103fc297bdSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 113fc297bdSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 123fc297bdSopenharmony_ci * See the License for the specific language governing permissions and 133fc297bdSopenharmony_ci * limitations under the License. 143fc297bdSopenharmony_ci */ 153fc297bdSopenharmony_ci 163fc297bdSopenharmony_ci#include "loadconfigxmlfile_fuzzer.h" 173fc297bdSopenharmony_ci 183fc297bdSopenharmony_ci#define private public 193fc297bdSopenharmony_ci#include "socperf.h" 203fc297bdSopenharmony_ci 213fc297bdSopenharmony_cinamespace OHOS { 223fc297bdSopenharmony_cinamespace SOCPERF { 233fc297bdSopenharmony_ci const std::string fuzzedFile = "myFuzzed.xml"; 243fc297bdSopenharmony_ci const int32_t FILE_RETURN_SUCCESS = 1; 253fc297bdSopenharmony_ci std::mutex mutexLock; 263fc297bdSopenharmony_ci std::unique_ptr<SocPerf> socPerf = nullptr; 273fc297bdSopenharmony_ci 283fc297bdSopenharmony_ci bool DoInit() 293fc297bdSopenharmony_ci { 303fc297bdSopenharmony_ci std::lock_guard<std::mutex> lock(mutexLock); 313fc297bdSopenharmony_ci if (socPerf) { 323fc297bdSopenharmony_ci return true; 333fc297bdSopenharmony_ci } 343fc297bdSopenharmony_ci socPerf = std::make_unique<SocPerf>(); 353fc297bdSopenharmony_ci return socPerf != nullptr; 363fc297bdSopenharmony_ci } 373fc297bdSopenharmony_ci 383fc297bdSopenharmony_ci void DoSomethingInterestingWithMyAPI(const uint8_t* data, size_t size) 393fc297bdSopenharmony_ci { 403fc297bdSopenharmony_ci if (!DoInit()) { 413fc297bdSopenharmony_ci return; 423fc297bdSopenharmony_ci } 433fc297bdSopenharmony_ci 443fc297bdSopenharmony_ci // generate fuzzed xml 453fc297bdSopenharmony_ci FILE *pFile = fopen(fuzzedFile.c_str(), "wb"); 463fc297bdSopenharmony_ci if (!pFile) { 473fc297bdSopenharmony_ci return; 483fc297bdSopenharmony_ci } 493fc297bdSopenharmony_ci 503fc297bdSopenharmony_ci int32_t retCode = fwrite(reinterpret_cast<const void*>(data), size, 1, pFile); // 1 means count=1 513fc297bdSopenharmony_ci if (retCode < FILE_RETURN_SUCCESS) { 523fc297bdSopenharmony_ci (void)fclose(pFile); 533fc297bdSopenharmony_ci pFile = nullptr; 543fc297bdSopenharmony_ci return; 553fc297bdSopenharmony_ci } 563fc297bdSopenharmony_ci 573fc297bdSopenharmony_ci (void)fclose(pFile); 583fc297bdSopenharmony_ci pFile = nullptr; 593fc297bdSopenharmony_ci socPerf->socPerfConfig_.LoadConfigXmlFile(fuzzedFile); 603fc297bdSopenharmony_ci } 613fc297bdSopenharmony_ci} // namespace SOCPERF 623fc297bdSopenharmony_ci} // namespace OHOS 633fc297bdSopenharmony_ci 643fc297bdSopenharmony_ci/* Fuzzer entry point */ 653fc297bdSopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 663fc297bdSopenharmony_ci{ 673fc297bdSopenharmony_ci /* Run your code on data */ 683fc297bdSopenharmony_ci OHOS::SOCPERF::DoSomethingInterestingWithMyAPI(data, size); 693fc297bdSopenharmony_ci return 0; 703fc297bdSopenharmony_ci} 71