• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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