1ea497e4dSopenharmony_ci/* 2ea497e4dSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3ea497e4dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ea497e4dSopenharmony_ci * you may not use this file except in compliance with the License. 5ea497e4dSopenharmony_ci * You may obtain a copy of the License at 6ea497e4dSopenharmony_ci * 7ea497e4dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ea497e4dSopenharmony_ci * 9ea497e4dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ea497e4dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ea497e4dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ea497e4dSopenharmony_ci * See the License for the specific language governing permissions and 13ea497e4dSopenharmony_ci * limitations under the License. 14ea497e4dSopenharmony_ci */ 15ea497e4dSopenharmony_ci 16ea497e4dSopenharmony_ci#include "iam_fuzz_test.h" 17ea497e4dSopenharmony_ci 18ea497e4dSopenharmony_ci#include <cstdint> 19ea497e4dSopenharmony_ci#include <string> 20ea497e4dSopenharmony_ci#include <vector> 21ea497e4dSopenharmony_ci 22ea497e4dSopenharmony_ci#include "parcel.h" 23ea497e4dSopenharmony_ci#include "securec.h" 24ea497e4dSopenharmony_ci 25ea497e4dSopenharmony_ci#include "iam_logger.h" 26ea497e4dSopenharmony_ci 27ea497e4dSopenharmony_ci#define LOG_TAG "FACE_AUTH_TEST" 28ea497e4dSopenharmony_ci 29ea497e4dSopenharmony_cinamespace OHOS { 30ea497e4dSopenharmony_cinamespace UserIam { 31ea497e4dSopenharmony_cinamespace Common { 32ea497e4dSopenharmony_cinamespace { 33ea497e4dSopenharmony_ciconstexpr int32_t MAX_DATA_LEN = 200; 34ea497e4dSopenharmony_civoid FillFuzzBuffer(Parcel &parcel, void *p, uint32_t len) 35ea497e4dSopenharmony_ci{ 36ea497e4dSopenharmony_ci if (len == 0) { 37ea497e4dSopenharmony_ci return; 38ea497e4dSopenharmony_ci } 39ea497e4dSopenharmony_ci 40ea497e4dSopenharmony_ci auto buffer = parcel.ReadBuffer(len); 41ea497e4dSopenharmony_ci if (buffer == nullptr) { 42ea497e4dSopenharmony_ci IAM_LOGE("ReadBuffer len %{public}u fail", len); 43ea497e4dSopenharmony_ci return; 44ea497e4dSopenharmony_ci } 45ea497e4dSopenharmony_ci 46ea497e4dSopenharmony_ci if (memcpy_s(p, len, buffer, len) != EOK) { 47ea497e4dSopenharmony_ci IAM_LOGE("memcpy_s fail"); 48ea497e4dSopenharmony_ci return; 49ea497e4dSopenharmony_ci } 50ea497e4dSopenharmony_ci 51ea497e4dSopenharmony_ci return; 52ea497e4dSopenharmony_ci} 53ea497e4dSopenharmony_ci} // namespace 54ea497e4dSopenharmony_ci 55ea497e4dSopenharmony_civoid FillFuzzUint8Vector(Parcel &parcel, std::vector<uint8_t> &data) 56ea497e4dSopenharmony_ci{ 57ea497e4dSopenharmony_ci uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN; 58ea497e4dSopenharmony_ci uint32_t memLen = len * sizeof(uint8_t); 59ea497e4dSopenharmony_ci data.resize(len); 60ea497e4dSopenharmony_ci FillFuzzBuffer(parcel, static_cast<void *>(&data[0]), memLen); 61ea497e4dSopenharmony_ci IAM_LOGI("fill vector len %{public}u ok", len); 62ea497e4dSopenharmony_ci} 63ea497e4dSopenharmony_ci 64ea497e4dSopenharmony_civoid FillFuzzInt8Vector(Parcel &parcel, std::vector<int8_t> &data) 65ea497e4dSopenharmony_ci{ 66ea497e4dSopenharmony_ci uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN; 67ea497e4dSopenharmony_ci uint32_t memLen = len * sizeof(int8_t); 68ea497e4dSopenharmony_ci data.resize(len); 69ea497e4dSopenharmony_ci FillFuzzBuffer(parcel, static_cast<void *>(&data[0]), memLen); 70ea497e4dSopenharmony_ci IAM_LOGI("fill vector len %{public}u ok", len); 71ea497e4dSopenharmony_ci} 72ea497e4dSopenharmony_ci 73ea497e4dSopenharmony_civoid FillFuzzUint32Vector(Parcel &parcel, std::vector<uint32_t> &data) 74ea497e4dSopenharmony_ci{ 75ea497e4dSopenharmony_ci uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN; 76ea497e4dSopenharmony_ci uint32_t memLen = len * sizeof(uint32_t); 77ea497e4dSopenharmony_ci data.resize(len); 78ea497e4dSopenharmony_ci FillFuzzBuffer(parcel, static_cast<void *>(&data[0]), memLen); 79ea497e4dSopenharmony_ci IAM_LOGI("fill vector len %{public}u ok", len); 80ea497e4dSopenharmony_ci} 81ea497e4dSopenharmony_ci 82ea497e4dSopenharmony_civoid FillFuzzUint64Vector(Parcel &parcel, std::vector<uint64_t> &data) 83ea497e4dSopenharmony_ci{ 84ea497e4dSopenharmony_ci uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN; 85ea497e4dSopenharmony_ci uint32_t memLen = len * sizeof(uint64_t); 86ea497e4dSopenharmony_ci data.resize(len); 87ea497e4dSopenharmony_ci FillFuzzBuffer(parcel, static_cast<void *>(&data[0]), memLen); 88ea497e4dSopenharmony_ci IAM_LOGI("fill vector len %{public}u ok", len); 89ea497e4dSopenharmony_ci} 90ea497e4dSopenharmony_ci 91ea497e4dSopenharmony_civoid FillFuzzString(Parcel &parcel, std::string &str) 92ea497e4dSopenharmony_ci{ 93ea497e4dSopenharmony_ci uint32_t len = parcel.ReadUint32() % MAX_DATA_LEN + 1; 94ea497e4dSopenharmony_ci uint32_t memLen = len * sizeof(char); 95ea497e4dSopenharmony_ci std::vector<char> data(len, 0); 96ea497e4dSopenharmony_ci FillFuzzBuffer(parcel, static_cast<void *>(&data[0]), memLen - 1); 97ea497e4dSopenharmony_ci str = std::string(&data[0]); 98ea497e4dSopenharmony_ci IAM_LOGI("fill string len %{public}u ok", len - 1); 99ea497e4dSopenharmony_ci} 100ea497e4dSopenharmony_ci} // namespace Common 101ea497e4dSopenharmony_ci} // namespace UserIam 102ea497e4dSopenharmony_ci} // namespace OHOS