diff --git a/frameworks/innerkitsimpl/test/fuzztest/BUILD.gn b/frameworks/innerkitsimpl/test/fuzztest/BUILD.gn index ac89c5dbf4692b36e3716a1b4fee143b48cc9a33..a63132fcc38d12ba0905a5438d56e47c7a8ea0c8 100644 --- a/frameworks/innerkitsimpl/test/fuzztest/BUILD.gn +++ b/frameworks/innerkitsimpl/test/fuzztest/BUILD.gn @@ -80,6 +80,7 @@ group("media_library_fuzztest") { "medialibrarymultistagescapture_fuzzer:MediaLibraryMultistagesCaptureFuzzTest", "medialibrarymultistagesdeferredcapture_fuzzer:MediaLibraryMultistagesDeferredCaptureFuzzTest", "medialibrarypermission_fuzzer:MediaLibraryPermissionFuzzTest", + "medialibraryphotoeditsizeoperation_fuzzer:MediaLibraryPhotoEditSizeOperationFuzzTest", "medialibraryrefreshmanager_fuzzer:MediaLibraryRefreshManagerFuzzTest", "medialibraryrestore_fuzzer:MediaLibraryRestoreFuzzTest", "medialibraryserviceextension_fuzzer:MediaLibraryServiceExtensionFuzzTest", diff --git a/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/BUILD.gn b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/BUILD.gn new file mode 100644 index 0000000000000000000000000000000000000000..4783fb9001b934367305291dbe65b320490f87cc --- /dev/null +++ b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/BUILD.gn @@ -0,0 +1,61 @@ +# Copyright (c) 2025 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/multimedia/media_library/media_library.gni") + +ohos_fuzztest("MediaLibraryPhotoEditSizeOperationFuzzTest") { + module_out_path = "media_library/media_library" + fuzz_config_file = "." + + include_dirs = [ + "${MEDIALIB_INNERKITS_PATH}/medialibrary_data_extension/include", + "${MEDIALIB_INTERFACES_PATH}/inner_api/media_library_helper/include", + ] + + sources = [ "./media_library_photo_edit_size_operation_fuzzer.cpp" ] + + deps = [ + "${MEDIALIB_INNERKITS_PATH}/media_library_helper:media_library", + "${MEDIALIB_INNERKITS_PATH}/medialibrary_data_extension:medialibrary_data_extension", + ] + + external_deps = [ + "ability_base:configuration", + "ability_base:want", + "ability_base:zuri", + "ability_runtime:ability_context_native", + "ability_runtime:ability_manager", + "ability_runtime:abilitykit_native", + "ability_runtime:app_context", + "ability_runtime:app_manager", + "ability_runtime:dataobs_manager", + "ability_runtime:runtime", + "bundle_framework:appexecfwk_core", + "c_utils:utils", + "common_event_service:cesfwk_innerkits", + "data_share:datashare_common", + "data_share:datashare_consumer", + "data_share:datashare_provider", + "hilog:libhilog", + "hitrace:hitrace_meter", + "image_framework:image_native", + "ipc:ipc_single", + "kv_store:distributeddata_inner", + "napi:ace_napi", + "player_framework:media_client", + "relational_store:native_rdb", + "relational_store:rdb_data_share_adapter", + "user_file_service:file_access_extension_ability_kit", + ] +} diff --git a/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/corpus/init b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/corpus/init new file mode 100644 index 0000000000000000000000000000000000000000..7fdbabd923fe8d1774f17ed76a00f9cb703b7cd9 --- /dev/null +++ b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/corpus/init @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +FUZZ \ No newline at end of file diff --git a/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/media_library_photo_edit_size_operation_fuzzer.cpp b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/media_library_photo_edit_size_operation_fuzzer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dc571a911bc3aff5088934461b49cdfbc211153c --- /dev/null +++ b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/media_library_photo_edit_size_operation_fuzzer.cpp @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "media_library_photo_edit_size_operation_fuzzer.h" + +#include +#include +#include +#include + +#include "photo_edit_size_operation.h" +#include "ability_context_impl.h" +#include "media_log.h" +#include "rdb_utils.h" +#include "medialibrary_rdbstore.h" +#include "medialibrary_data_manager.h" +#include "medialibrary_unistore_manager.h" +#include "medialibrary_kvstore_manager.h" +#include "medialibrary_photo_operations.h" +#include "media_file_utils.h" +#include "result_set_utils.h" + +namespace OHOS { +namespace Media { +using namespace std; +using namespace OHOS::NativeRdb; +using namespace OHOS::DataShare; +using OHOS::DataShare::DataSharePredicates; + +struct PhotoMode { + string path; + int64_t editTime; +}; + +struct TakePhotoResult { + int32_t fileId; + string path; +}; + +static const int32_t NUM_BYTES = 1; +static const std::string EDITDATA_VALUE = "{\"imageEffect\":{\"filters\":[{\"name\":\"InplaceSticker\"," + "\"values\":{\"RESOURCE_DIRECTORY\":\"/sys_prod/resource/camera\"}}],\"name\":\"brandWaterMark\"}}"; +static const std::string COMPATIBLE_FORMAT_VALUE = "com.demo.test"; +static const std::string FORMAT_VERSION_VALUE = "0"; +static const std::string CAMERA_BUNDLE_NAME = "com.example.hmos.camera"; + +FuzzedDataProvider *provider = nullptr; +std::shared_ptr g_rdbStore; + +static const uint8_t BUF[] = { + 255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 1, 0, 96, 0, 96, 0, 0, 255, 219, 0, 67, 0, 8, 6, 6, 7, 6, 5, 8, + 7, 7, 7, 9, 9, 8, 10, 12, 20, 13, 12, 11, 11, 12, 25, 18, 19, 15, 20, 29, 26, 31, 30, 29, 26, 28, 28, 32, 36, 46, + 39, 32, 34, 44, 35, 28, 28, 40, 55, 41, 44, 48, 49, 52, 52, 52, 31, 39, 57, 61, 56, 50, 60, 46, 51, 52, 50, 255, + 219, 0, 67, 1, 9, 9, 9, 12, 11, 12, 24, 13, 13, 24, 50, 33, 28, 33, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 255, 192, 0, 17, 8, 0, 132, 0, 132, 3, 1, 34, 0, 2, 17, 1, 3, 17, 1, 255, 196, + 0, 31, 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, + 16, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125, 1, 2, 3, 0, 4, 17, 5, 18, 33, 49, 65, 6, 19, 81, 97, 7, 34, + 113, 20, 50, 129, 145, 161, 8, 35, 66, 177, 193, 21, 82, 209, 240, 36, 51, 98, 114, 130, 9, 10, 22, 23, 24, 25, 26, + 37, 38, 39, 40, 41, 42, 52, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, + 99, 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 131, 132, 133, 134, 135, 136, 137, + 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 255, 196, 0, 31, + 1, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 255, 196, 0, 181, 17, 0, + 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119, 0, 1, 2, 3, 17, 4, 5, 33, 49, 6, 18, 65, 81, 7, 97, 113, 19, 34, 50, + 129, 8, 20, 66, 145, 161, 177, 193, 9, 35, 51, 82, 240, 21, 98, 114, 209, 10, 22, 36, 52, 225, 37, 241, 23, 24, 25, + 26, 38, 39, 40, 41, 42, 53, 54, 55, 56, 57, 58, 67, 68, 69, 70, 71, 72, 73, 74, 83, 84, 85, 86, 87, 88, 89, 90, 99, + 100, 101, 102, 103, 104, 105, 106, 115, 116, 117, 118, 119, 120, 121, 122, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 146, 147, 148, 149, 150, 151, 152, 153, 154, 162, 163, 164, 165, 166, 167, 168, 169, 170, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 194, 195, 196, 197, 198, 199, 200, 201, 202, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 242, 243, 244, 245, 246, 247, 248, 249, 250, 255, 218, 0, 12, 3, 1, 0, + 2, 17, 3, 17, 0, 63, 0, 244, 74, 40, 162, 191, 35, 62, 148, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, + 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, + 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, + 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, + 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, + 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, + 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, + 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, + 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, + 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, + 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, + 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 40, 162, + 138, 0, 40, 162, 138, 0, 40, 162, 138, 0, 255, 217 +}; + +string g_fileName = ""; +TakePhotoResult g_takePhotoResult = { }; +string g_fileIdStr = ""; +string g_filePath = ""; +vector g_fileIds = { }; +vector g_filePaths = { }; + +int32_t WriteFile(int destfd) +{ + write(destfd, BUF, sizeof(BUF)); + return E_OK; +} + +string CreateCacheFile() +{ + string cacheFileName = g_fileName; + string uri = PhotoColumn::PHOTO_CACHE_URI_PREFIX + cacheFileName; + MediaFileUtils::UriAppendKeyValue(uri, URI_PARAM_API_VERSION, to_string(MEDIA_API_VERSION_V10)); + Uri openCacheUri(uri); + MediaLibraryCommand cmd(openCacheUri); + int32_t cacheFileFd = MediaLibraryDataManager::GetInstance()->OpenFile(cmd, "w"); + WriteFile(cacheFileFd); + close(cacheFileFd); + return cacheFileName; +} + +int32_t CreatePhotoAsset() +{ + MediaLibraryCommand cmd(OperationObject::FILESYSTEM_PHOTO, OperationType::CREATE, + MediaLibraryApi::API_10); + OHOS::NativeRdb::ValuesBucket values; + string displayName = g_fileName; + values.PutString(MediaColumn::MEDIA_NAME, displayName); + values.PutInt(MediaColumn::MEDIA_TYPE, MediaType::MEDIA_TYPE_IMAGE); + cmd.SetValueBucket(values); + int32_t ret = MediaLibraryPhotoOperations::Create(cmd); + if (ret < 0) { + return ret; + } + return ret; +} + +void SubmitCache(DataShareValuesBucket &valuesBucket, bool isAddWater, bool isEdited) +{ + MediaLibraryCommand submitCacheCmd(OperationObject::FILESYSTEM_PHOTO, + OperationType::SUBMIT_CACHE, MediaLibraryApi::API_10); + if (isAddWater && !isEdited) { + // 预留 + } + string assetUri; + MediaLibraryDataManager::GetInstance()->InsertExt(submitCacheCmd, valuesBucket, assetUri); +} + +DataShareValuesBucket GetValuesBucket(int32_t fileId, std::string cacheFileName, bool isSetEditData) +{ + DataShareValuesBucket valuesBucket; + valuesBucket.Put(PhotoColumn::MEDIA_ID, fileId); + valuesBucket.Put(CACHE_FILE_NAME, cacheFileName); + if (isSetEditData) { + valuesBucket.Put(EDIT_DATA, EDITDATA_VALUE); + valuesBucket.Put(COMPATIBLE_FORMAT, COMPATIBLE_FORMAT_VALUE); + valuesBucket.Put(FORMAT_VERSION, FORMAT_VERSION_VALUE); + } + return valuesBucket; +} + +PhotoMode GetPhotoMode(int fileId) +{ + PhotoMode photoMode; + vector columns = { PhotoColumn::MEDIA_FILE_PATH, PhotoColumn::PHOTO_EDIT_TIME }; + MediaLibraryCommand cmd(OperationObject::FILESYSTEM_PHOTO, OperationType::QUERY, + MediaLibraryApi::API_10); + cmd.GetAbsRdbPredicates()->EqualTo(PhotoColumn::MEDIA_ID, to_string(fileId)); + auto resultSet = g_rdbStore->Query(cmd, columns); + resultSet->GoToFirstRow(); + photoMode.path = GetStringVal(PhotoColumn::MEDIA_FILE_PATH, resultSet); + photoMode.editTime = GetInt64Val(PhotoColumn::PHOTO_EDIT_TIME, resultSet); + return photoMode; +} + +string GetFilePath(int fileId) +{ + PhotoMode mode = GetPhotoMode(fileId); + return mode.path; +} + +TakePhotoResult TakePhotoMock(bool isAddWater) +{ + TakePhotoResult photoResult; + string cacheFileName = CreateCacheFile(); + int32_t fileId = CreatePhotoAsset(); + string path = GetFilePath(fileId); + photoResult.fileId = fileId; + photoResult.path = path; + DataShareValuesBucket valuesBucket; + valuesBucket.Put(PhotoColumn::MEDIA_ID, fileId); + valuesBucket.Put(CACHE_FILE_NAME, cacheFileName); + if (!isAddWater) { + SubmitCache(valuesBucket, isAddWater, false); + } else { + valuesBucket.Put(EDIT_DATA, EDITDATA_VALUE); + valuesBucket.Put(COMPATIBLE_FORMAT, COMPATIBLE_FORMAT_VALUE); + valuesBucket.Put(FORMAT_VERSION, FORMAT_VERSION_VALUE); + SubmitCache(valuesBucket, isAddWater, false); + } + return photoResult; +} + +void EditPhoto(TakePhotoResult editResult, bool isSetEditData, bool isAddWater) +{ + string cacheFileName = CreateCacheFile(); + DataShareValuesBucket valuesBucket = GetValuesBucket(editResult.fileId, cacheFileName, isSetEditData); + SubmitCache(valuesBucket, isAddWater, true); +} + +bool IsEdited(int fileId) +{ + PhotoMode mode = GetPhotoMode(fileId); + return mode.editTime > 0; +} + +void WriteDefferedPhoto(bool &isEdited, std::string &path) +{ + MediaLibraryPhotoOperations::ProcessMultistagesPhoto(isEdited, path, BUF, sizeof(BUF), 1); +} + +static void RandomDataInit() +{ + g_fileName = provider->ConsumeBytesAsString(NUM_BYTES) + ".jpg"; + + g_takePhotoResult = TakePhotoMock(true); + EditPhoto(g_takePhotoResult, true, true); + bool isEdited = IsEdited(g_takePhotoResult.fileId); + WriteDefferedPhoto(isEdited, g_takePhotoResult.path); + + g_fileIdStr = std::to_string(g_takePhotoResult.fileId); + g_filePath = g_takePhotoResult.path; + + g_fileIds.push_back(g_fileIdStr); + g_filePaths.push_back(g_filePath); +} + +static void PhotoEditSizeOperationTest() +{ + bool hasMore = provider->ConsumeBool(); + int limitCount = provider->ConsumeIntegral(); + std::string startFileId = ""; + + PhotoEditSizeOperation::CalSingleEditDataSize(g_fileIdStr.c_str(), g_filePath); + PhotoEditSizeOperation::GetFileIdByCloudPath(g_rdbStore, g_fileIdStr, g_filePath); + PhotoEditSizeOperation::GetFileIdsAndPathS(g_rdbStore, g_fileIds, g_filePaths, + startFileId, hasMore, limitCount); + PhotoEditSizeOperation::UpdateMediaSizeFromStorage(); +} + +static void SetTables() +{ + vector createTableSqlList = { Media::PhotoColumn::CREATE_PHOTO_TABLE }; + for (auto &createTableSql : createTableSqlList) { + CHECK_AND_RETURN_LOG(g_rdbStore != nullptr, "g_rdbStore is null."); + int32_t ret = g_rdbStore->ExecuteSql(createTableSql); + if (ret != NativeRdb::E_OK) { + MEDIA_ERR_LOG("Execute sql %{private}s failed.", createTableSql.c_str()); + return; + } + MEDIA_DEBUG_LOG("Execute sql %{private}s success.", createTableSql.c_str()); + } +} + +static void Init() +{ + auto stageContext = std::make_shared(); + auto abilityContextImpl = std::make_shared(); + abilityContextImpl->SetStageContext(stageContext); + int32_t sceneCode = 0; + auto ret = Media::MediaLibraryDataManager::GetInstance()->InitMediaLibraryMgr(abilityContextImpl, + abilityContextImpl, sceneCode); + CHECK_AND_RETURN_LOG(ret == NativeRdb::E_OK, "InitMediaLibrary Mgr failed, ret: %{public}d.", ret); + auto rdbStore = Media::MediaLibraryUnistoreManager::GetInstance().GetRdbStore(); + if (rdbStore == nullptr) { + MEDIA_ERR_LOG("rdbStore is nullptr."); + return; + } + g_rdbStore = rdbStore; + SetTables(); +} + +static inline void ClearKvStore() +{ + Media::MediaLibraryKvStoreManager::GetInstance().CloseAllKvStore(); +} + +} // namespace Media +} // namespace OHOS + +extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) +{ + OHOS::Media::Init(); + return 0; +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) +{ + FuzzedDataProvider fdp(data, size); + OHOS::Media::provider = &fdp; + if (data == nullptr) { + return 0; + } + OHOS::Media::RandomDataInit(); + OHOS::Media::PhotoEditSizeOperationTest(); + OHOS::Media::ClearKvStore(); + return 0; +} diff --git a/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/media_library_photo_edit_size_operation_fuzzer.h b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/media_library_photo_edit_size_operation_fuzzer.h new file mode 100644 index 0000000000000000000000000000000000000000..512414d5a53175e74e9d8847d022c44f1475bf14 --- /dev/null +++ b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/media_library_photo_edit_size_operation_fuzzer.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef NOTIFYCHANGE_FUZZER_H +#define NOTIFYCHANGE_FUZZER_H + +#define FUZZ_PROJECT_NAME "media_library_photo_edit_size_operation_fuzzer" + +#endif \ No newline at end of file diff --git a/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/project.xml b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/project.xml new file mode 100644 index 0000000000000000000000000000000000000000..0610e58171c33476cd232aeb78a150374c68d7d7 --- /dev/null +++ b/frameworks/innerkitsimpl/test/fuzztest/medialibraryphotoeditsizeoperation_fuzzer/project.xml @@ -0,0 +1,25 @@ + + + + + + 1500 + + 300 + + 4096 + +