diff --git a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp index 5c9200b098db637515f920133d59b7442f56cbc1..59d2290c20b9e58d12e563ed55a2f3d345df4247 100644 --- a/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp +++ b/services/distributeddataservice/service/test/fuzztest/udmfservice_fuzzer/udmfservice_fuzzer.cpp @@ -572,6 +572,283 @@ void IsFileMangerIntentionFuzz(FuzzedDataProvider &provider) auto intention = provider.ConsumeRandomLengthString(); udmfServiceImpl->IsFileMangerIntention(intention); } + +void CheckAppIdFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string intention = provider.ConsumeRandomLengthString(); + std::string bundleName = provider.ConsumeRandomLengthString(); + std::string appId = provider.ConsumeRandomLengthString(); + std::string groupId = provider.ConsumeRandomLengthString(); + uint32_t tokenid = provider.ConsumeIntegral(); + Privilege privilege; + privilege.tokenId = tokenid; + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + UnifiedKey key(intention, bundleName, groupId); + std::shared_ptr runtime = std::make_shared(); + runtime->key = key; + runtime->privileges.emplace_back(privilege); + runtime->sourcePackage = bundleName; + runtime->createPackage = bundleName; + runtime->recordTotalNum = static_cast(data.GetRecords().size()); + runtime->tokenId = tokenid; + runtime->appId = appId; + udmfServiceImpl->CheckAppId(runtime, bundleName); +} + +void CheckDeleteDataPermissionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string bundleName = provider.ConsumeRandomLengthString(); + std::string appId = provider.ConsumeRandomLengthString(); + uint32_t tokenid = provider.ConsumeIntegral(); + Privilege privilege; + privilege.tokenId = tokenid; + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey udKey = UnifiedKey("drag", "com.test.demo", groupIdStr); + std::shared_ptr runtime = std::make_shared(); + runtime->key = udKey; + runtime->privileges.emplace_back(privilege); + runtime->sourcePackage = bundleName; + runtime->createPackage = bundleName; + runtime->recordTotalNum = static_cast(data.GetRecords().size()); + runtime->tokenId = tokenid; + runtime->appId = appId; + QueryOption query; + query.key = udKey.GetUnifiedKey(); + query.intention = Intention::UD_INTENTION_DRAG; + query.tokenId = provider.ConsumeIntegral(); + udmfServiceImpl->CheckDeleteDataPermission(appId, runtime, query); +} + +void StoreSyncFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey key = UnifiedKey("drag", "com.test.demo", groupIdStr); + QueryOption query; + query.key = key.GetUnifiedKey(); + query.intention = Intention::UD_INTENTION_DRAG; + query.tokenId = provider.ConsumeIntegral(); + std::vector devices = { "11", "22" }; + udmfServiceImpl->StoreSync(key, query, devices); +} + +void SetAppShareOptionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string intention = provider.ConsumeRandomLengthString(); + int32_t shareOption = provider.ConsumeIntegral(); + udmfServiceImpl->SetAppShareOption(intention, shareOption); +} + +void RemoveAppShareOptionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string intention = provider.ConsumeRandomLengthString(); + udmfServiceImpl->RemoveAppShareOption(intention); +} + +void QueryDataCommonFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey udKey = UnifiedKey("drag", "com.test.demo", groupIdStr); + QueryOption query; + query.key = udKey.GetUnifiedKey(); + query.intention = Intention::UD_INTENTION_DRAG; + query.tokenId = provider.ConsumeIntegral(); + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + std::shared_ptr store; + std::vector dataSet = { data }; + udmfServiceImpl->QueryDataCommon(query, dataSet, store); +} + +void ClearAsynProcessByKeyFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string businessUdKey = provider.ConsumeRandomLengthString(); + udmfServiceImpl->ClearAsynProcessByKey(businessUdKey); +} + +void TransferToEntriesIfNeedFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey udKey = UnifiedKey("drag", "com.test.demo", groupIdStr); + QueryOption query; + query.key = udKey.GetUnifiedKey(); + query.intention = Intention::UD_INTENTION_DRAG; + query.tokenId = provider.ConsumeIntegral(); + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + std::shared_ptr obj1 = std::make_shared(); + obj1->value_[UNIFORM_DATA_TYPE] = "general.image-uri"; + obj1->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj1->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + std::shared_ptr obj2 = std::make_shared(); + obj2->value_[UNIFORM_DATA_TYPE] = "general.txt-uri"; + obj2->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj2->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + std::shared_ptr obj3 = std::make_shared(); + obj3->value_[UNIFORM_DATA_TYPE] = "general.html-uri"; + obj3->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj3->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + auto record1 = std::make_shared(FILE_URI, obj1); + auto record2 = std::make_shared(FILE_URI, obj2); + auto record3 = std::make_shared(FILE_URI, obj3); + data.AddRecord(record); + data.AddRecord(record1); + data.AddRecord(record2); + data.AddRecord(record3); + udmfServiceImpl->TransferToEntriesIfNeed(query, data); +} + +void IsValidOptionsNonDragFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey key = UnifiedKey("drag", "com.test.demo", groupIdStr); + CustomOption option = {.intention = Intention::UD_INTENTION_DRAG}; + std::string intention = UD_INTENTION_MAP.at(option.intention); + udmfServiceImpl->IsValidOptionsNonDrag(key, intention); +} + +void CloseStoreWhenCorruptedFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string intention = provider.ConsumeRandomLengthString(); + int32_t status = provider.ConsumeIntegral(); + udmfServiceImpl->CloseStoreWhenCorrupted(intention, status); +} + +void HandleDbErrorFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string intention = provider.ConsumeRandomLengthString(); + int32_t status = provider.ConsumeIntegral(); + udmfServiceImpl->HandleDbError(intention, status); +} + +void BuildMetaFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string storeId = provider.ConsumeRandomLengthString(); + int userId = provider.ConsumeIntegral(); + udmfServiceImpl->BuildMeta(storeId, userId); +} + +void ProcessResultFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::map results; + std::string key = provider.ConsumeRandomLengthString(); + int32_t value = provider.ConsumeIntegral(); + results.emplace(std::make_pair(key, value)); + udmfServiceImpl->ProcessResult(results); +} + +void RegisterAsyncProcessInfoFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::string businessUdKey = provider.ConsumeRandomLengthString(); + udmfServiceImpl->RegisterAsyncProcessInfo(businessUdKey); +} + +void IsNeedMetaSyncFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + DistributedData::StoreMetaData meta; + uint8_t len = provider.ConsumeIntegral(); + std::vector uuids(len); + for (int i = 0; i < len; i++) { + std::string uuid = provider.ConsumeRandomLengthString(); + uuids[i] = uuid; + } + udmfServiceImpl->IsNeedMetaSync(meta, uuids); +} + +void VerifyDataAccessPermissionFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + std::shared_ptr runtime = std::make_shared(); + std::vector groupId(ID_LEN, '0'); + for (size_t i = 0; i < groupId.size(); ++i) { + groupId[i] = provider.ConsumeIntegralInRange(MINIMUM, MAXIMUM); + } + std::string groupIdStr(groupId.begin(), groupId.end()); + UnifiedKey udKey = UnifiedKey("drag", "com.test.demo", groupIdStr); + QueryOption query; + query.key = udKey.GetUnifiedKey(); + query.intention = Intention::UD_INTENTION_DRAG; + query.tokenId = provider.ConsumeIntegral(); + UnifiedData data; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + data.AddRecord(record); + udmfServiceImpl->VerifyDataAccessPermission(runtime, query, data); +} + +void HandleDelayDataCallbackFuzz(FuzzedDataProvider &provider) +{ + std::shared_ptr udmfServiceImpl = std::make_shared(); + DelayGetDataInfo delayGetDataInfo; + UnifiedData unifiedData; + std::shared_ptr obj = std::make_shared(); + obj->value_[UNIFORM_DATA_TYPE] = "general.file-uri"; + obj->value_[FILE_URI_PARAM] = provider.ConsumeRandomLengthString(); + obj->value_[FILE_TYPE] = provider.ConsumeRandomLengthString(); + auto record = std::make_shared(FILE_URI, obj); + unifiedData.AddRecord(record); + std::string key = provider.ConsumeRandomLengthString(); + udmfServiceImpl->HandleDelayDataCallback(delayGetDataInfo, unifiedData, key); +} } /* Fuzzer entry point */ @@ -620,5 +897,22 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) OHOS::ProcessDataFuzz(provider); OHOS::VerifyIntentionPermissionFuzz(provider); OHOS::IsFileMangerIntentionFuzz(provider); + OHOS::CheckAppIdFuzz(provider); + OHOS::CheckDeleteDataPermissionFuzz(provider); + OHOS::StoreSyncFuzz(provider); + OHOS::SetAppShareOptionFuzz(provider); + OHOS::RemoveAppShareOptionFuzz(provider); + OHOS::QueryDataCommonFuzz(provider); + OHOS::ClearAsynProcessByKeyFuzz(provider); + OHOS::TransferToEntriesIfNeedFuzz(provider); + OHOS::IsValidOptionsNonDragFuzz(provider); + OHOS::CloseStoreWhenCorruptedFuzz(provider); + OHOS::HandleDbErrorFuzz(provider); + OHOS::BuildMetaFuzz(provider); + OHOS::ProcessResultFuzz(provider); + OHOS::RegisterAsyncProcessInfoFuzz(provider); + OHOS::IsNeedMetaSyncFuzz(provider); + OHOS::VerifyDataAccessPermissionFuzz(provider); + OHOS::HandleDelayDataCallbackFuzz(provider); return 0; } \ No newline at end of file