• 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 "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 }