diff --git a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp index 6b96ef854a..0214c383a0 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp @@ -628,14 +628,15 @@ napi_value JsAbilityContext::OnOpenLinkInner(napi_env env, const AAFwk::Want& wa TAG_LOGI(AAFwkTag::CONTEXT, "OpenLink succeeded."); return; } + if (freeInstallObserver_ == nullptr) { + TAG_LOGE(AAFwkTag::CONTEXT, "freeInstallObserver_ is nullptr."); + RemoveOpenLinkTask(requestCode); + return; + } if (*innerErrorCode == AAFwk::ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK) { TAG_LOGI(AAFwkTag::CONTEXT, "start ability by default succeeded."); - if (freeInstallObserver_ != nullptr) { - freeInstallObserver_->OnInstallFinishedByUrl(startTime, url, ERR_OK); - return; - } - TAG_LOGE(AAFwkTag::CONTEXT, "freeInstallObserver_ is nullptr."); - *innerErrorCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); + freeInstallObserver_->OnInstallFinishedByUrl(startTime, url, ERR_OK); + return; } TAG_LOGI(AAFwkTag::CONTEXT, "OpenLink failed."); freeInstallObserver_->OnInstallFinishedByUrl(startTime, url, *innerErrorCode); diff --git a/frameworks/native/ability/native/ui_extension_ability/js_ui_extension_context.cpp b/frameworks/native/ability/native/ui_extension_ability/js_ui_extension_context.cpp index 4cf5cfa8f5..04a5b86f44 100755 --- a/frameworks/native/ability/native/ui_extension_ability/js_ui_extension_context.cpp +++ b/frameworks/native/ability/native/ui_extension_ability/js_ui_extension_context.cpp @@ -349,14 +349,15 @@ napi_value JsUIExtensionContext::OnOpenLinkInner(napi_env env, const AAFwk::Want TAG_LOGI(AAFwkTag::UI_EXT, "OpenLink succeeded."); return; } + if (freeInstallObserver_ == nullptr) { + TAG_LOGE(AAFwkTag::UI_EXT, "freeInstallObserver_ is nullptr."); + RemoveOpenLinkTask(requestCode); + return; + } if (*innerErrorCode == AAFwk::ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK) { TAG_LOGI(AAFwkTag::UI_EXT, "start ability by default succeeded."); - if (freeInstallObserver_ != nullptr) { - freeInstallObserver_->OnInstallFinishedByUrl(startTime, url, ERR_OK); - return; - } - TAG_LOGE(AAFwkTag::UI_EXT, "freeInstallObserver_ is nullptr."); - *innerErrorCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); + freeInstallObserver_->OnInstallFinishedByUrl(startTime, url, ERR_OK); + return; } TAG_LOGI(AAFwkTag::UI_EXT, "OpenLink failed."); freeInstallObserver_->OnInstallFinishedByUrl(startTime, url, *innerErrorCode); diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 7f0fec76aa..32dad27064 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -3949,6 +3949,10 @@ int32_t AbilityManagerStub::PreStartMissionInner(MessageParcel &data, MessagePar int32_t AbilityManagerStub::OpenLinkInner(MessageParcel &data, MessageParcel &reply) { sptr want = data.ReadParcelable(); + if (want == nullptr) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "want is nullptr."); + return ERR_INVALID_VALUE; + } sptr callerToken = data.ReadRemoteObject(); int32_t userId = data.ReadInt32(); int requestCode = data.ReadInt32(); diff --git a/test/fuzztest/abilitymanagerservicefifth_fuzzer/abilitymanagerservicefifth_fuzzer.cpp b/test/fuzztest/abilitymanagerservicefifth_fuzzer/abilitymanagerservicefifth_fuzzer.cpp index e3a616066f..75cf994cc4 100755 --- a/test/fuzztest/abilitymanagerservicefifth_fuzzer/abilitymanagerservicefifth_fuzzer.cpp +++ b/test/fuzztest/abilitymanagerservicefifth_fuzzer/abilitymanagerservicefifth_fuzzer.cpp @@ -88,6 +88,7 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) abilityms->DoAbilityBackground(token, uint32Param); abilityms->DelegatorMoveMissionToFront(int32Param); abilityms->UpdateCallerInfo(*want, token); + abilityms->OpenLink(*want, token, int32Param, int32Param); abilityms->JudgeMultiUserConcurrency(int32Param); #ifdef ABILITY_COMMAND_FOR_TEST abilityms->ForceTimeoutForTest(stringParam, stringParam);