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#include "PerfFileFormat_fuzzer.h" 17#include "perf_file_format.h" 18 19using namespace OHOS::Developtools::HiPerf; 20 21namespace OHOS { 22bool FuzzPerfFileFormat(const uint8_t *data, size_t size) 23{ 24 char buf[DATA_MAX_SIZE] = { 0 }; 25 if (memcpy_s(buf, sizeof(buf) - 1, data, size) != 0) { // 1 : make sure end of '\0' 26 return false; 27 } 28 std::unique_ptr<PerfFileSectionString> perfFileSectionString = 29 std::make_unique<PerfFileSectionString>(FEATURE::HIPERF_FILES_SYMBOL, buf, size); 30 perfFileSectionString->GetBinary(buf, size); 31 std::unique_ptr<PerfFileSectionNrCpus> perfFileSectionNrCpus = 32 std::make_unique<PerfFileSectionNrCpus>(FEATURE::HIPERF_FILES_SYMBOL, buf, size); 33 perfFileSectionNrCpus->GetBinary(buf, size); 34 std::unique_ptr<PerfFileSectionU64> perfFileSectionU64 = 35 std::make_unique<PerfFileSectionU64>(FEATURE::HIPERF_FILES_SYMBOL, buf, size); 36 perfFileSectionU64->GetBinary(buf, size); 37 return 0; 38} 39} // namespace OHOS 40 41/* Fuzzer entry point */ 42extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 43{ 44/* Run your code on data */ 45#ifdef DEBUG_HIPERF_FUZZ 46 ScopeDebugLevel mix(LEVEL_DEBUG, true); 47 DebugLogger::GetInstance()->Disable(false); 48#else 49 OHOS::Developtools::HiPerf::StdoutRecord noStdOut("/dev/null", "w"); 50#endif 51 52 OHOS::FuzzPerfFileFormat(data, size); 53 return 0; 54} 55