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 16 #include "medialibraryappstateobserver_fuzzer.h" 17 18 #include <cstddef> 19 #include <sstream> 20 #include <string> 21 #include <fuzzer/FuzzedDataProvider.h> 22 23 #include "medialibrary_appstate_observer.h" 24 #include "if_system_ability_manager.h" 25 #include "iservice_registry.h" 26 #include "media_app_uri_permission_column.h" 27 #include "media_app_uri_sensitive_column.h" 28 #include "media_library_manager.h" 29 #include "media_log.h" 30 #include "medialibrary_data_manager.h" 31 #include "medialibrary_errno.h" 32 #include "system_ability_definition.h" 33 #include "ability_info.h" 34 #include "app_state_data.h" 35 36 namespace OHOS { 37 using namespace std; 38 using namespace DataShare; 39 using namespace OHOS::AppExecFwk; 40 using OHOS::AppExecFwk::AppStateData; 41 static const int32_t NUM_BYTES = 1; 42 static const int32_t MAX_ABILITY_TYPE = 30; 43 FuzzedDataProvider *FDP = nullptr; 44 FuzzVector()45static inline std::vector<int32_t> FuzzVector() 46 { 47 return { FDP->ConsumeIntegral<int32_t>() }; 48 } 49 FuzzExtensionAbilityType()50static inline AppExecFwk::ExtensionAbilityType FuzzExtensionAbilityType() 51 { 52 int32_t value = FDP->ConsumeIntegralInRange<int32_t>(0, MAX_ABILITY_TYPE); 53 return static_cast<AppExecFwk::ExtensionAbilityType>(value); 54 } 55 FuzzAppStateData()56static AppExecFwk::AppStateData FuzzAppStateData() 57 { 58 AppExecFwk::AppStateData appStateData; 59 appStateData.isFocused = FDP->ConsumeBool(); 60 appStateData.isSplitScreenMode = FDP->ConsumeBool(); 61 appStateData.isFloatingWindowMode = FDP->ConsumeBool(); 62 appStateData.isSpecifyTokenId = FDP->ConsumeBool(); 63 appStateData.isPreloadModule = FDP->ConsumeBool(); 64 appStateData.pid = FDP->ConsumeIntegral<int32_t>(); 65 appStateData.uid = FDP->ConsumeIntegral<int32_t>(); 66 appStateData.state = FDP->ConsumeIntegral<int32_t>(); 67 appStateData.appIndex = FDP->ConsumeIntegral<int32_t>(); 68 appStateData.accessTokenId = FDP->ConsumeIntegral<uint32_t>(); 69 appStateData.extensionType = FuzzExtensionAbilityType(); 70 appStateData.renderPids = FuzzVector(); 71 appStateData.bundleName = FDP->ConsumeBytesAsString(NUM_BYTES); 72 appStateData.callerBundleName = FDP->ConsumeBytesAsString(NUM_BYTES); 73 return appStateData; 74 } 75 AppStateObserver()76static void AppStateObserver() 77 { 78 AppExecFwk::AppStateData appStateData = FuzzAppStateData(); 79 sptr<Media::MedialibraryAppStateObserver> appStateObserver = 80 new (std::nothrow) Media::MedialibraryAppStateObserver(); 81 appStateObserver->OnAppStopped(appStateData); 82 } 83 84 } // namespace OHOS 85 LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)86extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) 87 { 88 FuzzedDataProvider fdp(data, size); 89 OHOS::FDP = &fdp; 90 if (data == nullptr) { 91 return 0; 92 } 93 OHOS::AppStateObserver(); 94 return 0; 95 } 96