• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #include "cloudsyncmanager_fuzzer.h"
16 
17 #include <cstddef>
18 #include <cstdint>
19 #include <memory>
20 
21 #include "cloud_fuzzer_helper.h"
22 #include "cloud_sync_manager.h"
23 #include "cloud_sync_manager_impl.h"
24 #include "service_proxy.h"
25 #include "i_cloud_download_callback.h"
26 #include "i_cloud_sync_callback.h"
27 
28 namespace OHOS {
29 constexpr size_t U32_AT_SIZE = 4;
30 constexpr size_t U64_AT_SIZE = 8;
31 constexpr size_t BOOL_AT_SIZE = 1;
32 
33 using namespace OHOS::FileManagement::CloudSync;
34 using namespace std;
35 class ICloudSyncCallbackTest : public IRemoteStub<ICloudSyncCallback> {
36 public:
OnSyncStateChanged(SyncType type,SyncPromptState state)37     void OnSyncStateChanged(SyncType type, SyncPromptState state) override {}
OnSyncStateChanged(CloudSyncState state,ErrorType error)38     void OnSyncStateChanged(CloudSyncState state, ErrorType error) override {}
39 };
40 
41 class ICloudDownloadCallbackTest : public IRemoteStub<ICloudDownloadCallback> {
42 public:
OnDownloadProcess(const DownloadProgressObj & progress)43     void OnDownloadProcess(const DownloadProgressObj &progress) override {}
44 };
45 
RegisterCallbackFuzzTest(FuzzData & fuzzData,size_t size)46 void RegisterCallbackFuzzTest(FuzzData &fuzzData, size_t size)
47 {
48     fuzzData.ResetData(size);
49     std::string bundleName = fuzzData.GetStringFromData(static_cast<int>(size));
50     auto cloudSyncCallback = make_shared<ICloudSyncCallbackTest>();
51     CloudSyncManager::GetInstance().RegisterCallback(cloudSyncCallback, bundleName);
52 }
53 
UnRegisterCallbackFuzzTest(FuzzData & fuzzData,size_t size)54 void UnRegisterCallbackFuzzTest(FuzzData &fuzzData, size_t size)
55 {
56     fuzzData.ResetData(size);
57     std::string bundleName = fuzzData.GetStringFromData(static_cast<int>(size));
58     CloudSyncManager::GetInstance().UnRegisterCallback(bundleName);
59 }
60 
StartSyncFuzzTest(FuzzData & fuzzData,size_t size)61 void StartSyncFuzzTest(FuzzData &fuzzData, size_t size)
62 {
63     fuzzData.ResetData(size);
64     std::string bundleName = fuzzData.GetStringFromData(static_cast<int>(size));
65     CloudSyncManager::GetInstance().StartSync(bundleName);
66 }
67 
GetSyncTimeFuzzTest(FuzzData & fuzzData,size_t size)68 void GetSyncTimeFuzzTest(FuzzData &fuzzData, size_t size)
69 {
70     fuzzData.ResetData(size);
71     int64_t syncTime{0};
72     std::string bundleName = fuzzData.GetStringFromData(static_cast<int>(size));
73     CloudSyncManager::GetInstance().GetSyncTime(syncTime, bundleName);
74 }
75 
StartSyncCallbackFuzzTest(FuzzData & fuzzData,size_t size)76 void StartSyncCallbackFuzzTest(FuzzData &fuzzData, size_t size)
77 {
78     fuzzData.ResetData(size);
79     bool forceFlag = fuzzData.GetData<bool>();
80     auto cloudSyncCallback = make_shared<ICloudSyncCallbackTest>();
81     CloudSyncManager::GetInstance().StartSync(forceFlag, cloudSyncCallback);
82 }
83 
TriggerSyncFuzzTest(FuzzData & fuzzData,size_t size)84 void TriggerSyncFuzzTest(FuzzData &fuzzData, size_t size)
85 {
86     fuzzData.ResetData(size);
87     int32_t userId = 100;
88     std::string bundleName = fuzzData.GetStringFromData(static_cast<int>(size));
89     CloudSyncManager::GetInstance().TriggerSync(bundleName, userId);
90 
91     fuzzData.ResetData(size);
92     userId = fuzzData.GetData<int32_t>();
93     bundleName = fuzzData.GetStringFromData(static_cast<int>(size - U32_AT_SIZE));
94     CloudSyncManager::GetInstance().TriggerSync(bundleName, userId);
95 }
96 
StopSyncFuzzTest(FuzzData & fuzzData,size_t size)97 void StopSyncFuzzTest(FuzzData &fuzzData, size_t size)
98 {
99     fuzzData.ResetData(size);
100     std::string bundleName = fuzzData.GetStringFromData(static_cast<int>(size));
101     CloudSyncManager::GetInstance().StopSync(bundleName);
102 }
103 
ChangeAppSwitchFuzzTest(FuzzData & fuzzData,size_t size)104 void ChangeAppSwitchFuzzTest(FuzzData &fuzzData, size_t size)
105 {
106     fuzzData.ResetData(size);
107     bool status = fuzzData.GetData<bool>();
108     int len = static_cast<int>((size - BOOL_AT_SIZE) >> 1);
109     std::string accoutId = fuzzData.GetStringFromData(len);
110     string bundleName = fuzzData.GetStringFromData(static_cast<int>(len));
111     CloudSyncManager::GetInstance().ChangeAppSwitch(accoutId, bundleName, status);
112 }
113 
NotifyDataChangeFuzzTest(FuzzData & fuzzData,size_t size)114 void NotifyDataChangeFuzzTest(FuzzData &fuzzData, size_t size)
115 {
116     fuzzData.ResetData(size);
117     int len = static_cast<int>(size >> 1);
118     std::string accoutId = fuzzData.GetStringFromData(len);
119     std::string bundleName = fuzzData.GetStringFromData(len);
120     CloudSyncManager::GetInstance().NotifyDataChange(accoutId, bundleName);
121 }
122 
StartDownloadFileFuzzTest(FuzzData & fuzzData,size_t size)123 void StartDownloadFileFuzzTest(FuzzData &fuzzData, size_t size)
124 {
125     fuzzData.ResetData(size);
126     int64_t downloadId = 0;
127     string uri = fuzzData.GetStringFromData(static_cast<int>(size));
128     auto downloadCallback = make_shared<ICloudDownloadCallbackTest>();
129     CloudSyncManager::GetInstance().StartDownloadFile(uri, downloadCallback, downloadId);
130 }
131 
StopDownloadFileFuzzTest(FuzzData & fuzzData,size_t size)132 void StopDownloadFileFuzzTest(FuzzData &fuzzData, size_t size)
133 {
134     fuzzData.ResetData(size);
135     bool needClean = fuzzData.GetData<bool>();
136     int64_t downloadId = fuzzData.GetData<int64_t>();
137     CloudSyncManager::GetInstance().StopDownloadFile(downloadId, needClean);
138 }
139 
EnableCloudFuzzTest(FuzzData & fuzzData,size_t size)140 void EnableCloudFuzzTest(FuzzData &fuzzData, size_t size)
141 {
142     fuzzData.ResetData(size);
143     int len = static_cast<int>(size >> 1);
144     std::string accoutId = fuzzData.GetStringFromData(len);
145     string itemStr = fuzzData.GetStringFromData(len - static_cast<int>(BOOL_AT_SIZE));
146     bool itemBool = fuzzData.GetData<bool>();
147     SwitchDataObj switchDataObj;
148     switchDataObj.switchData.insert({itemStr, itemBool});
149     CloudSyncManager::GetInstance().EnableCloud(accoutId, switchDataObj);
150     auto proxy = ServiceProxy::GetInstance();
151     CloudSyncManagerImpl::GetInstance().SetDeathRecipient(proxy->AsObject());
152 }
153 
DisableCloudFuzzTest(FuzzData & fuzzData,size_t size)154 void DisableCloudFuzzTest(FuzzData &fuzzData, size_t size)
155 {
156     fuzzData.ResetData(size);
157     std::string accoutId = fuzzData.GetStringFromData(static_cast<int>(size));
158     CloudSyncManager::GetInstance().DisableCloud(accoutId);
159 }
160 
CleanFuzzTest(FuzzData & fuzzData,size_t size)161 void CleanFuzzTest(FuzzData &fuzzData, size_t size)
162 {
163     fuzzData.ResetData(size);
164     int len = static_cast<int>(size >> 1);
165     std::string accoutId = fuzzData.GetStringFromData(len);
166     int32_t itemInt = fuzzData.GetData<int32_t>();
167     auto remainSize = fuzzData.GetRemainSize();
168     string itemStr = fuzzData.GetStringFromData(static_cast<int>(remainSize));
169     CleanOptions cleanOptions;
170     cleanOptions.appActionsData.insert({itemStr, itemInt});
171     CloudSyncManager::GetInstance().Clean(accoutId, cleanOptions);
172 }
173 
CleanCacheFuzzTest(FuzzData & fuzzData,size_t size)174 void CleanCacheFuzzTest(FuzzData &fuzzData, size_t size)
175 {
176     fuzzData.ResetData(size);
177     string uri = fuzzData.GetStringFromData(static_cast<int>(size));
178     CloudSyncManager::GetInstance().CleanCache(uri);
179 }
180 } // namespace OHOS
181 
182 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)183 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
184 {
185     /* Run your code on data */
186     if (data == nullptr || size <= (OHOS::U32_AT_SIZE << 1)) {
187         return 0;
188     }
189 
190     OHOS::FuzzData fuzzData(data, size);
191     OHOS::RegisterCallbackFuzzTest(fuzzData, size);
192     OHOS::UnRegisterCallbackFuzzTest(fuzzData, size);
193     OHOS::StartSyncFuzzTest(fuzzData, size);
194     OHOS::GetSyncTimeFuzzTest(fuzzData, size);
195     OHOS::StartSyncCallbackFuzzTest(fuzzData, size);
196     OHOS::TriggerSyncFuzzTest(fuzzData, size);
197     OHOS::StopSyncFuzzTest(fuzzData, size);
198     OHOS::ChangeAppSwitchFuzzTest(fuzzData, size);
199     OHOS::NotifyDataChangeFuzzTest(fuzzData, size);
200     OHOS::StartDownloadFileFuzzTest(fuzzData, size);
201     OHOS::StopDownloadFileFuzzTest(fuzzData, size);
202     OHOS::EnableCloudFuzzTest(fuzzData, size);
203     OHOS::DisableCloudFuzzTest(fuzzData, size);
204     OHOS::CleanFuzzTest(fuzzData, size);
205     OHOS::CleanCacheFuzzTest(fuzzData, size);
206     return 0;
207 }
208