1cc290419Sopenharmony_ci/* 2cc290419Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License. 5cc290419Sopenharmony_ci * You may obtain a copy of the License at 6cc290419Sopenharmony_ci * 7cc290419Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8cc290419Sopenharmony_ci * 9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and 13cc290419Sopenharmony_ci * limitations under the License. 14cc290419Sopenharmony_ci */ 15cc290419Sopenharmony_ci 16cc290419Sopenharmony_ci#include "ForwardReadStream_fuzzer.h" 17cc290419Sopenharmony_ci#include <uv.h> 18cc290419Sopenharmony_ci#include "forward.h" 19cc290419Sopenharmony_ci 20cc290419Sopenharmony_cinamespace Hdc { 21cc290419Sopenharmony_ci 22cc290419Sopenharmony_cibool FuzzForwardReadStream(const uint8_t *data, size_t size) 23cc290419Sopenharmony_ci{ 24cc290419Sopenharmony_ci if (size <= 0) { 25cc290419Sopenharmony_ci return true; 26cc290419Sopenharmony_ci } 27cc290419Sopenharmony_ci HTaskInfo hTaskInfo = new TaskInformation(); 28cc290419Sopenharmony_ci HdcSessionBase *daemon = new HdcSessionBase(false); 29cc290419Sopenharmony_ci hTaskInfo->ownerSessionClass = daemon; 30cc290419Sopenharmony_ci auto forward = new(std::nothrow) HdcForwardBase(hTaskInfo); 31cc290419Sopenharmony_ci if (forward == nullptr) { 32cc290419Sopenharmony_ci WRITE_LOG(LOG_FATAL, "FuzzForwardReadStream forward is null"); 33cc290419Sopenharmony_ci return false; 34cc290419Sopenharmony_ci } 35cc290419Sopenharmony_ci HdcForwardBase::HCtxForward ctx = (HdcForwardBase::HCtxForward)forward->MallocContext(true); 36cc290419Sopenharmony_ci if (ctx == nullptr) { 37cc290419Sopenharmony_ci WRITE_LOG(LOG_FATAL, "FuzzForwardReadStream ctx is null"); 38cc290419Sopenharmony_ci return false; 39cc290419Sopenharmony_ci } 40cc290419Sopenharmony_ci uv_stream_t *stream = (uv_stream_t *)&ctx->tcp; 41cc290419Sopenharmony_ci uint8_t *base = new uint8_t[size]; 42cc290419Sopenharmony_ci (void)memcpy_s(base, size, const_cast<uint8_t *>(data), size); 43cc290419Sopenharmony_ci uv_buf_t rbf = uv_buf_init(reinterpret_cast<char *>(base), size); 44cc290419Sopenharmony_ci forward->ReadForwardBuf(stream, (ssize_t)size, &rbf); 45cc290419Sopenharmony_ci delete ctx; 46cc290419Sopenharmony_ci delete daemon; 47cc290419Sopenharmony_ci delete forward; 48cc290419Sopenharmony_ci delete hTaskInfo; 49cc290419Sopenharmony_ci return true; 50cc290419Sopenharmony_ci} 51cc290419Sopenharmony_ci} // namespace Hdc 52cc290419Sopenharmony_ci 53cc290419Sopenharmony_ci/* Fuzzer entry point */ 54cc290419Sopenharmony_ciextern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 55cc290419Sopenharmony_ci{ 56cc290419Sopenharmony_ci /* Run your code on data */ 57cc290419Sopenharmony_ci Hdc::FuzzForwardReadStream(data, size); 58cc290419Sopenharmony_ci return 0; 59cc290419Sopenharmony_ci} 60