• 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 "medialibrarycloudmediasyncdataconvert_fuzzer.h"
17 
18 #include <cstdint>
19 #include <string>
20 #include <fuzzer/FuzzedDataProvider.h>
21 #define private public
22 #include "cloud_album_data_convert.h"
23 #include "cloud_file_data_convert.h"
24 #include "cloud_data_convert_to_vo.h"
25 #undef private
26 #include "media_log.h"
27 
28 namespace OHOS {
29 using namespace std;
30 using namespace OHOS::Media;
31 using namespace OHOS::Media::CloudSync;
32 const int32_t NUM_BYTES = 1;
33 FuzzedDataProvider* provider;
34 
FuzzAlbumType()35 static inline AlbumType FuzzAlbumType()
36 {
37     int32_t value = provider->ConsumeIntegral<int32_t>();
38     if (value >= static_cast<int32_t>(AlbumType::NORMAL) &&
39         value <= static_cast<int32_t>(AlbumType::SOURCE)) {
40         return static_cast<AlbumType>(value);
41     }
42     return AlbumType::SOURCE;
43 }
44 
FuzzCloudMdkRecordPhotoAlbumVo()45 static CloudMdkRecordPhotoAlbumVo FuzzCloudMdkRecordPhotoAlbumVo()
46 {
47     CloudMdkRecordPhotoAlbumVo albumData;
48     albumData.albumType = FuzzAlbumType();
49     albumData.cloudId = provider->ConsumeBytesAsString(NUM_BYTES);
50     albumData.albumId = provider->ConsumeIntegral<int32_t>();
51     albumData.albumSubtype = provider->ConsumeIntegral<int32_t>();
52     albumData.isInWhiteList = provider->ConsumeBool();
53     albumData.lpath = provider->ConsumeBytesAsString(NUM_BYTES);
54     albumData.dualAlbumName = provider->ConsumeBytesAsString(NUM_BYTES);
55     albumData.albumNameEn = provider->ConsumeBytesAsString(NUM_BYTES);
56     albumData.dateModified = provider->ConsumeIntegral<int64_t>();
57     albumData.dateAdded = 0;
58     albumData.bundleName = provider->ConsumeBytesAsString(NUM_BYTES);
59     albumData.localLanguage = provider->ConsumeBytesAsString(NUM_BYTES);
60     return albumData;
61 }
62 
CloudAlbumDataConvertFuzzer()63 static void CloudAlbumDataConvertFuzzer()
64 {
65     CloudAlbumDataConvert cloudAlbumDataConvert;
66     std::map<string, MDKRecordField> map;
67     CloudMdkRecordPhotoAlbumVo albumData = FuzzCloudMdkRecordPhotoAlbumVo();
68     shared_ptr<MDKRecord> record = make_shared<MDKRecord>();
69     std::map<string, MDKRecordField> dataMap;
70     CloudMdkRecordPhotoAlbumVo upLoadRecord;
71     cloudAlbumDataConvert.HandleAlbumName(map, albumData);
72     cloudAlbumDataConvert.HandleGeneral(map, albumData);
73     cloudAlbumDataConvert.HandleProperties(record, dataMap, albumData);
74     cloudAlbumDataConvert.HandleAlbumLogicType(map, albumData);
75     cloudAlbumDataConvert.HandleType(map, albumData);
76     cloudAlbumDataConvert.HandleAlbumId(map, albumData);
77     cloudAlbumDataConvert.HandleRecordId(record, albumData);
78     cloudAlbumDataConvert.HandlePath(map, albumData);
79     cloudAlbumDataConvert.FillRecordId(record, albumData);
80     cloudAlbumDataConvert.HandleEmptyShow(record, dataMap, albumData);
81     cloudAlbumDataConvert.ConvertToDoubleScreenshot(record, dataMap);
82     cloudAlbumDataConvert.ConvertToMdkRecord(upLoadRecord);
83 }
84 
CloudFileDataConvertFuzzer()85 static void CloudFileDataConvertFuzzer()
86 {
87     CloudFileDataConvert cloudFileDataConvert;
88     CloudMdkRecordPhotoAlbumVo albumData;
89     string path = provider->ConsumeBytesAsString(NUM_BYTES);
90     string key = provider->ConsumeBytesAsString(NUM_BYTES);
91     string thumbSuffix = provider->ConsumeBytesAsString(NUM_BYTES);
92     int64_t fileSize = provider->ConsumeIntegral<int64_t>();
93     cloudFileDataConvert.GetThumbPath(path, key);
94     cloudFileDataConvert.GetFileSize(path, thumbSuffix, fileSize);
95 
96     std::map<std::string, MDKRecordField> map;
97     std::map<std::string, MDKRecordField> dataMap;
98     std::map<std::string, MDKRecordField> recordData;
99     bool isMovingPhoto = true;
100     CloudMdkRecordPhotosVo upLoadRecord;
101     cloudFileDataConvert.HandleThumbSize(map, upLoadRecord);
102     cloudFileDataConvert.HandleLcdSize(map, upLoadRecord);
103     cloudFileDataConvert.HandleFormattedDate(map, upLoadRecord);
104     cloudFileDataConvert.HandleUniqueFileds(dataMap, upLoadRecord);
105     cloudFileDataConvert.HandleFileType(dataMap, upLoadRecord);
106     cloudFileDataConvert.HandlePosition(map, upLoadRecord);
107     cloudFileDataConvert.HandleRotate(map, upLoadRecord);
108     cloudFileDataConvert.HandleProperties(dataMap, upLoadRecord);
109 
110     int32_t orientation = provider->ConsumeIntegral<int32_t>();
111     cloudFileDataConvert.GetLowerPath(path);
112     cloudFileDataConvert.HandleEditData(dataMap, path, isMovingPhoto);
113     cloudFileDataConvert.HandleContent(dataMap, upLoadRecord);
114     cloudFileDataConvert.HandleThumbnail(recordData, path, orientation);
115     cloudFileDataConvert.GetParentPath(path);
116     cloudFileDataConvert.HandleLcd(recordData, path, orientation);
117     cloudFileDataConvert.HandleAttachments(recordData, upLoadRecord);
118 
119     MDKRecord record;
120     vector<MDKRecord> records;
121     cloudFileDataConvert.SetSourceAlbum(record, upLoadRecord);
122     cloudFileDataConvert.InsertAlbumIdChanges(record, records, upLoadRecord);
123 
124     cloudFileDataConvert.HandleCompatibleFileds(dataMap, upLoadRecord);
125     cloudFileDataConvert.ConvertToMdkRecord(upLoadRecord, record);
126 
127     string cloudId = provider->ConsumeBytesAsString(NUM_BYTES);
128     MDKRecordOperResult result;
129     OnCopyRecord onCopyRecord;
130     OnModifyRecord onModifyRecord;
131     OnFileDirtyRecord onFileDirtyRecord;
132     OnCreateRecord onCreateRecord;
133     MDKRecord mdkRecord;
134     OnFetchPhotosVo OnFetchPhotoVo;
135     cloudFileDataConvert.BuildCopyRecord(cloudId, result, onCopyRecord);
136     cloudFileDataConvert.BuildModifyRecord(cloudId, result, onModifyRecord);
137     cloudFileDataConvert.ConvertFdirtyRecord(cloudId, result, onFileDirtyRecord);
138     cloudFileDataConvert.ConvertToOnCreateRecord(cloudId, result, onCreateRecord);
139     cloudFileDataConvert.ConverMDKRecordToOnFetchPhotosVo(mdkRecord, OnFetchPhotoVo);
140 }
141 
CloudDataConvertToVoFuzzer()142 static void CloudDataConvertToVoFuzzer()
143 {
144     CloudDataConvertToVo cloudDataConvertToVo;
145     PhotosVo photosVo;
146     photosVo.fileId = provider->ConsumeIntegral<int32_t>();
147     photosVo.cloudId = provider->ConsumeBytesAsString(NUM_BYTES);
148     photosVo.size = provider->ConsumeIntegral<int64_t>();
149     photosVo.path = provider->ConsumeBytesAsString(NUM_BYTES);
150     photosVo.fileName = provider->ConsumeBytesAsString(NUM_BYTES);
151     photosVo.type = provider->ConsumeIntegral<int32_t>();
152     photosVo.modifiedTime = provider->ConsumeIntegral<int64_t>();
153     photosVo.originalCloudId = provider->ConsumeBytesAsString(NUM_BYTES);
154     std::map<std::string, CloudFileDataVo> attachment;
155     CloudFileDataVo file;
156     file.fileName = provider->ConsumeBytesAsString(NUM_BYTES);
157     file.filePath = provider->ConsumeBytesAsString(NUM_BYTES);
158     file.size = provider->ConsumeIntegral<int64_t>();
159     attachment[file.fileName] = file;
160     photosVo.attachment = attachment;
161     cloudDataConvertToVo.ConvertPhotosVoToCloudMetaData(photosVo);
162 }
163 } // namespace OHOS
164 
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)165 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
166 {
167     FuzzedDataProvider fdp(data, size);
168     if (data == nullptr) {
169         return 0;
170     }
171     OHOS::provider = &fdp;
172     OHOS::CloudAlbumDataConvertFuzzer();
173     OHOS::CloudFileDataConvertFuzzer();
174     OHOS::CloudDataConvertToVoFuzzer();
175     return 0;
176 }