1800b99b8Sopenharmony_ci/* 2800b99b8Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3800b99b8Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4800b99b8Sopenharmony_ci * you may not use this file except in compliance with the License. 5800b99b8Sopenharmony_ci * You may obtain a copy of the License at 6800b99b8Sopenharmony_ci * 7800b99b8Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8800b99b8Sopenharmony_ci * 9800b99b8Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10800b99b8Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11800b99b8Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12800b99b8Sopenharmony_ci * See the License for the specific language governing permissions and 13800b99b8Sopenharmony_ci * limitations under the License. 14800b99b8Sopenharmony_ci */ 15800b99b8Sopenharmony_ci 16800b99b8Sopenharmony_ci#include "faultloggerddumpcatcher_fuzzer.h" 17800b99b8Sopenharmony_ci 18800b99b8Sopenharmony_ci#include <cstddef> 19800b99b8Sopenharmony_ci#include <cstdint> 20800b99b8Sopenharmony_ci#include "dfx_dump_catcher.h" 21800b99b8Sopenharmony_ci#include "faultloggerd_client.h" 22800b99b8Sopenharmony_ci#include "fault_logger_daemon.h" 23800b99b8Sopenharmony_ci#include "faultloggerd_fuzzertest_common.h" 24800b99b8Sopenharmony_ci 25800b99b8Sopenharmony_cinamespace OHOS { 26800b99b8Sopenharmony_cinamespace HiviewDFX { 27800b99b8Sopenharmony_ciconst int FAULTLOGGER_FUZZTEST_MAX_STRING_LENGTH = 50; 28800b99b8Sopenharmony_ci 29800b99b8Sopenharmony_civoid DumpStackTraceTest(const uint8_t* data, size_t size) 30800b99b8Sopenharmony_ci{ 31800b99b8Sopenharmony_ci int pid; 32800b99b8Sopenharmony_ci int tid; 33800b99b8Sopenharmony_ci int offsetTotalLength = sizeof(pid) + sizeof(tid) + 34800b99b8Sopenharmony_ci (2 * FAULTLOGGER_FUZZTEST_MAX_STRING_LENGTH); // 2 : Offset by 2 string length 35800b99b8Sopenharmony_ci if (offsetTotalLength > size) { 36800b99b8Sopenharmony_ci return; 37800b99b8Sopenharmony_ci } 38800b99b8Sopenharmony_ci 39800b99b8Sopenharmony_ci STREAM_TO_VALUEINFO(data, pid); 40800b99b8Sopenharmony_ci STREAM_TO_VALUEINFO(data, tid); 41800b99b8Sopenharmony_ci 42800b99b8Sopenharmony_ci std::string msg(reinterpret_cast<const char*>(data), FAULTLOGGER_FUZZTEST_MAX_STRING_LENGTH); 43800b99b8Sopenharmony_ci data += FAULTLOGGER_FUZZTEST_MAX_STRING_LENGTH; 44800b99b8Sopenharmony_ci std::string invalidOption(reinterpret_cast<const char*>(data), FAULTLOGGER_FUZZTEST_MAX_STRING_LENGTH); 45800b99b8Sopenharmony_ci data += FAULTLOGGER_FUZZTEST_MAX_STRING_LENGTH; 46800b99b8Sopenharmony_ci 47800b99b8Sopenharmony_ci std::shared_ptr<DfxDumpCatcher> catcher = std::make_shared<DfxDumpCatcher>(); 48800b99b8Sopenharmony_ci catcher->DumpCatch(pid, tid, msg, DEFAULT_MAX_FRAME_NUM, false); 49800b99b8Sopenharmony_ci 50800b99b8Sopenharmony_ci std::string processdumpCmd = "dumpcatcher -p " + std::to_string(pid) + " -t " + std::to_string(tid); 51800b99b8Sopenharmony_ci system(processdumpCmd.c_str()); 52800b99b8Sopenharmony_ci 53800b99b8Sopenharmony_ci std::string processdumpInvalidCmd = "dumpcatcher -" + invalidOption + " -p " + 54800b99b8Sopenharmony_ci std::to_string(pid) + " -t " + std::to_string(tid); 55800b99b8Sopenharmony_ci system(processdumpInvalidCmd.c_str()); 56800b99b8Sopenharmony_ci} 57800b99b8Sopenharmony_ci} // namespace HiviewDFX 58800b99b8Sopenharmony_ci} // namespace OHOS 59800b99b8Sopenharmony_ci 60800b99b8Sopenharmony_ci/* Fuzzer entry point */ 61800b99b8Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) 62800b99b8Sopenharmony_ci{ 63800b99b8Sopenharmony_ci if (data == nullptr || size == 0) { 64800b99b8Sopenharmony_ci return 0; 65800b99b8Sopenharmony_ci } 66800b99b8Sopenharmony_ci 67800b99b8Sopenharmony_ci /* Run your code on data */ 68800b99b8Sopenharmony_ci OHOS::HiviewDFX::DumpStackTraceTest(data, size); 69800b99b8Sopenharmony_ci return 0; 70800b99b8Sopenharmony_ci} 71