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 "medialibrarycloudmediajsonhelper_fuzzer.h"
17
18 #include <cstdint>
19 #include <string>
20 #include <fuzzer/FuzzedDataProvider.h>
21 #define private public
22 #include "mdk_record.h"
23 #include "mdk_record_field.h"
24 #include "mdk_database.h"
25 #include "mdk_record_album_data.h"
26 #include "mdk_record_photos_data.h"
27 #include "json_helper.h"
28 #include "cloud_media_album_handler.h"
29 #include "mdk_record_reader.h"
30 #undef private
31 #include "media_log.h"
32
33 namespace OHOS {
34 using namespace std;
35 using namespace OHOS::Media;
36 using namespace OHOS::Media::CloudSync;
37 const int32_t NAME_LEN = 1;
38 FuzzedDataProvider* provider;
39
JsonHelperTest()40 static void JsonHelperTest()
41 {
42 Json::Value doubleData;
43 JsonHelper::GetDoubleFromJson(doubleData, "key", 0.0);
44 doubleData["key"] = provider->ConsumeFloatingPoint<double>();
45 JsonHelper::GetDoubleFromJson(doubleData, "key", 0.0);
46 JsonHelper::JsonToString(doubleData);
47 std::string jsonString = provider->ConsumeBytesAsString(NAME_LEN);
48 JsonHelper::StringToJson(jsonString);
49 Json::Value jsonArray(Json::arrayValue);
50 jsonArray.append(provider->ConsumeBytesAsString(NAME_LEN));
51 JsonHelper::JsonArrayToString(jsonArray, ",");
52 std::vector<std::string> vec;
53 JsonHelper::JsonToStrVec(jsonArray, vec);
54 std::string randomKey = provider->ConsumeBytesAsString(NAME_LEN);
55 JsonHelper::HasSpecifiedKey(doubleData, randomKey);
56 JsonHelper::HasSpecifiedKey(doubleData, "key");
57 }
58
JsonPhotosDataTest1()59 static void JsonPhotosDataTest1()
60 {
61 MDKAsset asset;
62 MDKRecordPhotosData PhotoData;
63 PhotoData.SetFileContent(asset);
64 PhotoData.GetFileContent();
65 PhotoData.SetFileEditData(asset);
66 PhotoData.GetFileEditData();
67 PhotoData.SetMediaType(provider->ConsumeIntegral<int32_t>());
68 PhotoData.GetMediaType();
69 PhotoData.SetDuration(provider->ConsumeIntegral<int32_t>());
70 PhotoData.GetDuration();
71 PhotoData.SetPropertiesDuration(provider->ConsumeIntegral<int32_t>());
72 PhotoData.GetPropertiesDuration();
73 PhotoData.SetHidden(provider->ConsumeIntegral<int32_t>());
74 PhotoData.GetHidden();
75 PhotoData.SetHiddenTime(provider->ConsumeIntegral<int64_t>());
76 PhotoData.GetHiddenTime();
77 PhotoData.SetRelativePath(provider->ConsumeBytesAsString(NAME_LEN));
78 PhotoData.GetRelativePath();
79 PhotoData.SetVirtualPath(provider->ConsumeBytesAsString(NAME_LEN));
80 PhotoData.GetVirtualPath();
81 PhotoData.SetDateModified(provider->ConsumeIntegral<int64_t>());
82 PhotoData.GetDateModified();
83 PhotoData.SetPhotoMetaDateModified(provider->ConsumeIntegral<int64_t>());
84 PhotoData.GetPhotoMetaDateModified();
85 PhotoData.SetSubType(provider->ConsumeIntegral<int64_t>());
86 PhotoData.GetSubType();
87 PhotoData.SetBurstCoverLevel(provider->ConsumeIntegral<int32_t>());
88 PhotoData.GetBurstCoverLevel();
89 PhotoData.SetBurstKey(provider->ConsumeBytesAsString(NAME_LEN));
90 }
91
JsonPhotosDataTest2()92 static void JsonPhotosDataTest2()
93 {
94 MDKRecordPhotosData PhotoData;
95 PhotoData.GetBurstKey();
96 PhotoData.SetDateYear(provider->ConsumeBytesAsString(NAME_LEN));
97 PhotoData.GetDateYear();
98 PhotoData.SetDateMonth(provider->ConsumeBytesAsString(NAME_LEN));
99 PhotoData.GetDateMonth();
100 PhotoData.SetDateDay(provider->ConsumeBytesAsString(NAME_LEN));
101 PhotoData.GetDateDay();
102 PhotoData.SetShootingMode(provider->ConsumeBytesAsString(NAME_LEN));
103 PhotoData.GetShootingMode();
104 PhotoData.SetShootingModeTag(provider->ConsumeBytesAsString(NAME_LEN));
105 PhotoData.GetShootingModeTag();
106 PhotoData.SetDynamicRangeType(provider->ConsumeIntegral<int32_t>());
107 PhotoData.GetDynamicRangeType();
108 PhotoData.SetFrontCamera(provider->ConsumeBytesAsString(NAME_LEN));
109 PhotoData.GetFrontCamera();
110 PhotoData.SetEditTime(provider->ConsumeIntegral<int64_t>());
111 PhotoData.GetEditTime();
112 PhotoData.SetOriginalSubType(provider->ConsumeIntegral<int32_t>());
113 PhotoData.GetOriginalSubType();
114 PhotoData.SetCoverPosition(provider->ConsumeIntegral<int64_t>());
115 PhotoData.GetCoverPosition();
116 PhotoData.SetIsRectificationCover(provider->ConsumeIntegral<int32_t>());
117 PhotoData.GetIsRectificationCover();
118 PhotoData.SetSupportedWatermarkType(provider->ConsumeIntegral<int32_t>());
119 PhotoData.GetSupportedWatermarkType();
120 PhotoData.SetStrongAssociation(provider->ConsumeIntegral<int32_t>());
121 PhotoData.GetStrongAssociation();
122 PhotoData.SetCloudFileId(provider->ConsumeIntegral<int32_t>());
123 PhotoData.GetCloudFileId();
124 PhotoData.SetCloudId(provider->ConsumeBytesAsString(NAME_LEN));
125 PhotoData.GetCloudId();
126 PhotoData.SetOriginalAssetCloudId(provider->ConsumeBytesAsString(NAME_LEN));
127 PhotoData.GetOriginalAssetCloudId();
128 }
129 } // namespace OHOS
130
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)131 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
132 {
133 FuzzedDataProvider fdp(data, size);
134 if (data == nullptr) {
135 return 0;
136 }
137 OHOS::provider = &fdp;
138 OHOS::JsonHelperTest();
139 OHOS::JsonPhotosDataTest1();
140 OHOS::JsonPhotosDataTest2();
141 return 0;
142 }