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