1 /*
2 * Copyright (c) 2025 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 "dataasset_fuzzer.h"
17
18 #include <fuzzer/FuzzedDataProvider.h>
19
20 #include "data_asset.h"
21 #include "grd_api_manager.h"
22 #include "oh_value_object.h"
23 #include "rdb_errno.h"
24 #include "relational_store.h"
25 #include "relational_store_error_code.h"
26 #include "relational_store_impl.h"
27
28 #define MAX_STRING_LENGTH 20
29
30 using namespace OHOS;
31 using namespace OHOS::NativeRdb;
32 using namespace OHOS::RdbNdk;
33
34 namespace OHOS {
OH_Data_Asset_SetNameFuzz(FuzzedDataProvider & provider)35 void OH_Data_Asset_SetNameFuzz(FuzzedDataProvider &provider)
36 {
37 Data_Asset *asset = OH_Data_Asset_CreateOne();
38 if (asset == nullptr) {
39 return;
40 }
41 std::string name = provider.ConsumeRandomLengthString(MAX_STRING_LENGTH);
42 OH_Data_Asset_SetName(asset, name.c_str());
43 OH_Data_Asset_DestroyOne(asset);
44
45 OH_Data_Asset_SetName(nullptr, nullptr);
46 OH_Data_Asset_DestroyOne(nullptr);
47 }
48
OH_Data_Asset_SetUriFuzz(FuzzedDataProvider & provider)49 void OH_Data_Asset_SetUriFuzz(FuzzedDataProvider &provider)
50 {
51 Data_Asset *asset = OH_Data_Asset_CreateOne();
52 if (asset == nullptr) {
53 return;
54 }
55 std::string uri = provider.ConsumeRandomLengthString(MAX_STRING_LENGTH);
56 OH_Data_Asset_SetUri(asset, uri.c_str());
57 OH_Data_Asset_DestroyOne(asset);
58
59 OH_Data_Asset_SetUri(nullptr, nullptr);
60 OH_Data_Asset_DestroyOne(nullptr);
61 }
62
OH_Data_Asset_SetPathFuzz(FuzzedDataProvider & provider)63 void OH_Data_Asset_SetPathFuzz(FuzzedDataProvider &provider)
64 {
65 Data_Asset *asset = OH_Data_Asset_CreateOne();
66 if (asset == nullptr) {
67 return;
68 }
69 std::string path = provider.ConsumeRandomLengthString(MAX_STRING_LENGTH);
70 OH_Data_Asset_SetPath(asset, path.c_str());
71 OH_Data_Asset_DestroyOne(asset);
72
73 OH_Data_Asset_SetPath(nullptr, nullptr);
74 OH_Data_Asset_DestroyOne(nullptr);
75 }
76
OH_Data_Asset_SetCreateTimeFuzz(FuzzedDataProvider & provider)77 void OH_Data_Asset_SetCreateTimeFuzz(FuzzedDataProvider &provider)
78 {
79 Data_Asset *asset = OH_Data_Asset_CreateOne();
80 if (asset == nullptr) {
81 return;
82 }
83 int64_t createTime = provider.ConsumeIntegral<int64_t>();
84 OH_Data_Asset_SetCreateTime(asset, createTime);
85 OH_Data_Asset_DestroyOne(asset);
86
87 OH_Data_Asset_SetCreateTime(nullptr, 0);
88 OH_Data_Asset_DestroyOne(nullptr);
89 }
90
OH_Data_Asset_SetModifyTimeFuzz(FuzzedDataProvider & provider)91 void OH_Data_Asset_SetModifyTimeFuzz(FuzzedDataProvider &provider)
92 {
93 Data_Asset *asset = OH_Data_Asset_CreateOne();
94 if (asset == nullptr) {
95 return;
96 }
97 int64_t modifyTime = provider.ConsumeIntegral<int64_t>();
98 OH_Data_Asset_SetModifyTime(asset, modifyTime);
99 OH_Data_Asset_DestroyOne(asset);
100
101 OH_Data_Asset_SetModifyTime(nullptr, 0);
102 OH_Data_Asset_DestroyOne(nullptr);
103 }
104
OH_Data_Asset_SetSizeFuzz(FuzzedDataProvider & provider)105 void OH_Data_Asset_SetSizeFuzz(FuzzedDataProvider &provider)
106 {
107 Data_Asset *asset = OH_Data_Asset_CreateOne();
108 if (asset == nullptr) {
109 return;
110 }
111 size_t size = provider.ConsumeIntegral<size_t>();
112 OH_Data_Asset_SetSize(asset, size);
113 OH_Data_Asset_DestroyOne(asset);
114
115 OH_Data_Asset_SetSize(nullptr, 0);
116 OH_Data_Asset_DestroyOne(nullptr);
117 }
118
OH_Data_Asset_SetStatusFuzz(FuzzedDataProvider & provider)119 void OH_Data_Asset_SetStatusFuzz(FuzzedDataProvider &provider)
120 {
121 Data_Asset *asset = OH_Data_Asset_CreateOne();
122 if (asset == nullptr) {
123 return;
124 }
125 const int min = 0;
126 const int max = 6;
127 Data_AssetStatus status = static_cast<Data_AssetStatus>(provider.ConsumeIntegralInRange<int>(min, max));
128 OH_Data_Asset_SetStatus(asset, status);
129 OH_Data_Asset_DestroyOne(asset);
130
131 OH_Data_Asset_SetStatus(nullptr, Data_AssetStatus::ASSET_NULL);
132 OH_Data_Asset_DestroyOne(nullptr);
133 }
134
OH_Data_Asset_GetNameFuzz(FuzzedDataProvider & provider)135 void OH_Data_Asset_GetNameFuzz(FuzzedDataProvider &provider)
136 {
137 Data_Asset *asset = OH_Data_Asset_CreateOne();
138 if (asset == nullptr) {
139 return;
140 }
141 char name[MAX_STRING_LENGTH];
142 size_t length = MAX_STRING_LENGTH;
143 OH_Data_Asset_GetName(asset, name, &length);
144 OH_Data_Asset_DestroyOne(asset);
145
146 OH_Data_Asset_GetName(nullptr, nullptr, nullptr);
147 OH_Data_Asset_DestroyOne(nullptr);
148 }
149
OH_Data_Asset_GetUriFuzz(FuzzedDataProvider & provider)150 void OH_Data_Asset_GetUriFuzz(FuzzedDataProvider &provider)
151 {
152 Data_Asset *asset = OH_Data_Asset_CreateOne();
153 if (asset == nullptr) {
154 return;
155 }
156 char uri[MAX_STRING_LENGTH];
157 size_t length = MAX_STRING_LENGTH;
158 OH_Data_Asset_GetUri(asset, uri, &length);
159 OH_Data_Asset_DestroyOne(asset);
160
161 OH_Data_Asset_GetUri(nullptr, nullptr, nullptr);
162 OH_Data_Asset_DestroyOne(nullptr);
163 }
164
OH_Data_Asset_GetPathFuzz(FuzzedDataProvider & provider)165 void OH_Data_Asset_GetPathFuzz(FuzzedDataProvider &provider)
166 {
167 Data_Asset *asset = OH_Data_Asset_CreateOne();
168 if (asset == nullptr) {
169 return;
170 }
171 char path[MAX_STRING_LENGTH];
172 size_t length = MAX_STRING_LENGTH;
173 OH_Data_Asset_GetPath(asset, path, &length);
174 OH_Data_Asset_DestroyOne(asset);
175
176 OH_Data_Asset_GetPath(nullptr, nullptr, nullptr);
177 OH_Data_Asset_DestroyOne(nullptr);
178 }
179
OH_Data_Asset_GetCreateTimeFuzz(FuzzedDataProvider & provider)180 void OH_Data_Asset_GetCreateTimeFuzz(FuzzedDataProvider &provider)
181 {
182 Data_Asset *asset = OH_Data_Asset_CreateOne();
183 if (asset == nullptr) {
184 return;
185 }
186 int64_t createTime;
187 OH_Data_Asset_GetCreateTime(asset, &createTime);
188 OH_Data_Asset_DestroyOne(asset);
189
190 OH_Data_Asset_GetCreateTime(nullptr, nullptr);
191 OH_Data_Asset_DestroyOne(nullptr);
192 }
193
OH_Data_Asset_GetModifyTimeFuzz(FuzzedDataProvider & provider)194 void OH_Data_Asset_GetModifyTimeFuzz(FuzzedDataProvider &provider)
195 {
196 Data_Asset *asset = OH_Data_Asset_CreateOne();
197 if (asset == nullptr) {
198 return;
199 }
200 int64_t modifyTime;
201 OH_Data_Asset_GetModifyTime(asset, &modifyTime);
202 OH_Data_Asset_DestroyOne(asset);
203
204 OH_Data_Asset_GetModifyTime(nullptr, nullptr);
205 OH_Data_Asset_DestroyOne(nullptr);
206 }
207
OH_Data_Asset_GetSizeFuzz(FuzzedDataProvider & provider)208 void OH_Data_Asset_GetSizeFuzz(FuzzedDataProvider &provider)
209 {
210 Data_Asset *asset = OH_Data_Asset_CreateOne();
211 if (asset == nullptr) {
212 return;
213 }
214 size_t size;
215 OH_Data_Asset_GetSize(asset, &size);
216 OH_Data_Asset_DestroyOne(asset);
217
218 OH_Data_Asset_GetSize(nullptr, nullptr);
219 OH_Data_Asset_DestroyOne(nullptr);
220 }
221
OH_Data_Asset_GetStatusFuzz(FuzzedDataProvider & provider)222 void OH_Data_Asset_GetStatusFuzz(FuzzedDataProvider &provider)
223 {
224 Data_Asset *asset = OH_Data_Asset_CreateOne();
225 if (asset == nullptr) {
226 return;
227 }
228 Data_AssetStatus status;
229 OH_Data_Asset_GetStatus(asset, &status);
230 OH_Data_Asset_DestroyOne(asset);
231
232 OH_Data_Asset_GetStatus(nullptr, nullptr);
233 OH_Data_Asset_DestroyOne(nullptr);
234 }
235 } // namespace OHOS
236
237 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)238 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
239 {
240 // Run your code on data
241 FuzzedDataProvider provider(data, size);
242 OHOS::OH_Data_Asset_SetNameFuzz(provider);
243 OHOS::OH_Data_Asset_SetUriFuzz(provider);
244 OHOS::OH_Data_Asset_SetPathFuzz(provider);
245 OHOS::OH_Data_Asset_SetCreateTimeFuzz(provider);
246 OHOS::OH_Data_Asset_SetModifyTimeFuzz(provider);
247 OHOS::OH_Data_Asset_SetSizeFuzz(provider);
248 OHOS::OH_Data_Asset_SetStatusFuzz(provider);
249 OHOS::OH_Data_Asset_GetNameFuzz(provider);
250 OHOS::OH_Data_Asset_GetUriFuzz(provider);
251 OHOS::OH_Data_Asset_GetPathFuzz(provider);
252 OHOS::OH_Data_Asset_GetCreateTimeFuzz(provider);
253 OHOS::OH_Data_Asset_GetModifyTimeFuzz(provider);
254 OHOS::OH_Data_Asset_GetSizeFuzz(provider);
255 OHOS::OH_Data_Asset_GetStatusFuzz(provider);
256 return 0;
257 }
258