diff --git a/common/include/dscreen_errcode.h b/common/include/dscreen_errcode.h index f19faef9d81faf18250ce5465f96f05d71485c3b..7fcc64d9d9e68d3d9c9375dd0cbc9dadbd6a3d3f 100644 --- a/common/include/dscreen_errcode.h +++ b/common/include/dscreen_errcode.h @@ -60,6 +60,8 @@ enum DScreenErrorCode { ERR_DH_SCREEN_SA_ENABLE_JSON_ERROR = -500034, ERR_DH_SCREEN_SA_VALUE_NOT_INIT = -500035, ERR_DH_SCREEN_SA_DSCREEN_SETUP_FAILED = -500036, + ERR_DH_SCREEN_SA_SET_IMAGESURFACE_FAIL = -500037, + ERR_DH_SCREEN_SA_INIT_SOURCE_FAIL = -500038, // Transport component error code ERR_DH_SCREEN_TRANS_ERROR = -51000, ERR_DH_SCREEN_TRANS_TIMEOUT = -51001, diff --git a/services/screenclient/src/screen_client.cpp b/services/screenclient/src/screen_client.cpp index 2a0b1754c724763617702ddd4f0295ef329bf098..8bf8d0f6ae10166a7560cb759e359d75eae3777c 100644 --- a/services/screenclient/src/screen_client.cpp +++ b/services/screenclient/src/screen_client.cpp @@ -152,7 +152,7 @@ int32_t ScreenClient::RemoveWindow(int32_t windowId) return ret; } DHLOGD("windowId (ID = %d) remove success.", windowId); - return DH_SUCCESS; + return ret; } } // namespace DistributedHardware } // namespace OHOS \ No newline at end of file diff --git a/services/screenclient/src/screen_client_window_adapter.cpp b/services/screenclient/src/screen_client_window_adapter.cpp index ef6279b9d107fac167028d3d909dbcdf3abfdf21..16266dc28f66032838a986a10ed440908380bf03 100644 --- a/services/screenclient/src/screen_client_window_adapter.cpp +++ b/services/screenclient/src/screen_client_window_adapter.cpp @@ -203,6 +203,10 @@ int32_t ScreenClientWindowAdapter::RemoveWindow(int32_t windowId) bool ScreenClientInputEventListener::OnInputEvent(const std::shared_ptr& pointerEvent) const { + if (pointerEvent == nullptr) { + DHLOGE("OnInputEvent failed, pointerEvent is nullptr."); + return false; + } DHLOGI("onInputEvent, pointerEvent"); pointerEvent->MarkProcessed(); return true; @@ -210,6 +214,10 @@ bool ScreenClientInputEventListener::OnInputEvent(const std::shared_ptr& keyEvent) const { + if (keyEvent == nullptr) { + DHLOGE("OnInputEvent failed, keyEvent is nullptr."); + return false; + } DHLOGI("onInputEvent, keyEvent"); keyEvent->MarkProcessed(); return true; @@ -217,6 +225,10 @@ bool ScreenClientInputEventListener::OnInputEvent(const std::shared_ptr& axisEvent) const { + if (axisEvent == nullptr) { + DHLOGE("OnInputEvent failed, axisEvent is nullptr."); + return false; + } DHLOGI("onInputEvent, axisEvent"); axisEvent->MarkProcessed(); return true; diff --git a/services/screenservice/sourceservice/dscreenmgr/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/src/dscreen.cpp index 3f0510dcb00054412b74bd6c6ad890ee69b4c419..74e23606975f140f7c841889c28d26d8a98177cc 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/dscreen.cpp @@ -182,6 +182,10 @@ void DScreen::HandleTask(const std::shared_ptr &task) void DScreen::HandleEnable(const std::string ¶m, const std::string &taskId) { + if (dscreenCallback_ == nullptr) { + DHLOGE("DScreen::HandleEnable, dscreenCallback_ is nullptr"); + return; + } DHLOGI("HandleEnable, devId: %s, dhId: %s", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str()); if (curState_ == ENABLED || curState_ == ENABLING || curState_ == CONNECTING || curState_ == CONNECTED) { dscreenCallback_->OnRegResult(shared_from_this(), taskId, DH_SUCCESS, "dscreen enable success."); @@ -266,6 +270,9 @@ int32_t DScreen::NegotiateCodecType(const std::string &remoteCodecInfoStr) } std::vector> caps = codecList->GetVideoEncoderCaps(); for (const auto &cap : caps) { + if (cap == nullptr) { + continue; + } std::shared_ptr codecInfo = cap->GetCodecInfo(); if (codecInfo == nullptr) { continue; @@ -299,6 +306,10 @@ int32_t DScreen::NegotiateCodecType(const std::string &remoteCodecInfoStr) void DScreen::HandleDisable(const std::string &taskId) { + if (dscreenCallback_ == nullptr) { + DHLOGE("DScreen::HandleDisable, dscreenCallback_ is nullptr"); + return; + } DHLOGI("HandleDisable, devId: %s, dhId: %s", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str()); SetState(DISABLING); int32_t ret = ScreenMgrAdapter::GetInstance().RemoveVirtualScreen(screenId_); diff --git a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp index e39c290dd97066ddbcee7b73ecf336e149e37eda..5cdaba248ab001f11335f99b981376ceec066663 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/dscreen_manager.cpp @@ -160,6 +160,10 @@ int32_t DScreenManager::AddToGroup(const std::shared_ptr &changedScreen } std::shared_ptr videoParam = changedScreen->GetVideoParam(); + if (videoParam == nullptr) { + DHLOGE("videoParam is nullptr."); + return ERR_DH_SCREEN_SA_VALUE_NOT_INIT; + } DisplayRect displayRect = mapRelation->GetDisplayRect(); videoParam->SetVideoWidth(displayRect.width); videoParam->SetVideoHeight(displayRect.height); @@ -196,6 +200,10 @@ int32_t DScreenManager::RemoveFromGroup(const std::shared_ptr &changedS void DScreenCallback::OnRegResult(const std::shared_ptr &dScreen, const std::string &reqId, const int32_t status, const std::string &data) { + if (dScreen == nullptr) { + DHLOGE("DScreenCallback::OnRegResult, dScreen id nullptr"); + return; + } DHLOGI("DScreenCallback::OnRegResult, devId: %s, dhId: %s, reqId: %s", GetAnonyString(dScreen->GetDevId()).c_str(), GetAnonyString(dScreen->GetDHId()).c_str(), reqId.c_str()); DScreenManager::GetInstance().OnRegResult(dScreen, reqId, status, data); @@ -204,6 +212,10 @@ void DScreenCallback::OnRegResult(const std::shared_ptr &dScreen, void DScreenCallback::OnUnregResult(const std::shared_ptr &dScreen, const std::string &reqId, const int32_t status, const std::string &data) { + if (dScreen == nullptr) { + DHLOGE("DScreenCallback::OnUnregResult, dScreen id nullptr"); + return; + } DHLOGI("DScreenCallback::OnUnregResult, devId: %s, dhId: %s, reqId: %s", GetAnonyString(dScreen->GetDevId()).c_str(), GetAnonyString(dScreen->GetDHId()).c_str(), reqId.c_str()); DScreenManager::GetInstance().OnUnregResult(dScreen, reqId, status, data); diff --git a/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp b/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp index 309af680c2477c6451cb4baa643ae0be482e0a8e..0522751209bb6013530af18a16ef598bdc7b7c90 100644 --- a/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/src/screen_manager_adapter.cpp @@ -39,6 +39,10 @@ ScreenMgrAdapter::~ScreenMgrAdapter() uint64_t ScreenMgrAdapter::CreateVirtualScreen(const std::string &devId, const std::string &dhId, const std::shared_ptr &videoParam) { + if (videoParam == nullptr) { + DHLOGE("ScreenMgrAdapter::CreateVirtualScreen, videoParam is nullptr"); + return SCREEN_ID_INVALID; + } DHLOGI("CreateVirtualScreen, width: %u, height: %u", videoParam->GetScreenWidth(), videoParam->GetScreenHeight()); std::string screenName = DSCREEN_PREFIX + SEPERATOR + GetInterruptString(devId) + @@ -72,6 +76,10 @@ uint64_t ScreenMgrAdapter::CreateVirtualScreen(const std::string &devId, const s int32_t ScreenMgrAdapter::RegisterScreenGroupListener(sptr listener) { + if (listener == nullptr) { + DHLOGE("ScreenMgrAdapter::RegisterScreenGroupListener, listener is nullptr."); + return ERR_DH_SCREEN_SA_REGISTER_SCREENLISTENER_FAIL; + } DHLOGI("RegisterScreenGroupListener"); if (listenerRegistered_) { DHLOGI("already registered listener."); @@ -88,6 +96,10 @@ int32_t ScreenMgrAdapter::RegisterScreenGroupListener(sptr listener) { + if (listener == nullptr) { + DHLOGE("ScreenMgrAdapter::UnregisterScreenGroupListener, listener is nullptr."); + return ERR_DH_SCREEN_SA_UNREGISTER_SCREENLISTENER_FAIL; + } DHLOGI("UnregisterScreenGroupListener"); if (!listenerRegistered_) { DHLOGI("listener already unregistered."); @@ -123,6 +135,10 @@ int32_t ScreenMgrAdapter::RemoveVirtualScreen(uint64_t screenId) int32_t ScreenMgrAdapter::SetImageSurface(uint64_t screenId, sptr surface) { + if (surface == nullptr) { + DHLOGE("ScreenMgrAdapter::SetImageSurface, surface is nullptr"); + return ERR_DH_SCREEN_SA_SET_IMAGESURFACE_FAIL; + } DHLOGI("SetImageSurface for virtualscreen, screenId: %ulld", screenId); Rosen::ScreenManager::GetInstance().SetVirtualScreenSurface(screenId, surface); return DH_SUCCESS; diff --git a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp index 1f24b76c40f91ed9d0289aa8323b7982bbcf0730..db9b47ded18429f432cb25f43bdaf4826153ab7e 100644 --- a/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp +++ b/services/screenservice/sourceservice/dscreenservice/src/dscreen_source_service.cpp @@ -76,6 +76,10 @@ bool DScreenSourceService::Init() int32_t DScreenSourceService::InitSource(const std::string ¶ms, const sptr &callback) { + if (callback == nullptr) { + DHLOGE("DScreenSourceService::InitSource, callback is nullptr."); + return ERR_DH_SCREEN_SA_INIT_SOURCE_FAIL; + } DHLOGI("InitSource"); int32_t ret = DScreenManager::GetInstance().Init(); if (ret != DH_SUCCESS) { diff --git a/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp b/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp index 2d85f41ea08071cfd78017817b68b2f9ed4c3704..53ce8b598e19bb28aac29875e29f8686ea8ab1e2 100644 --- a/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp +++ b/services/screentransport/screensinkprocessor/decoder/src/image_sink_decoder.cpp @@ -200,8 +200,8 @@ int32_t ImageSinkDecoder::SetDecoderFormat(const VideoParam &configParam) int32_t ImageSinkDecoder::SetOutputSurface(sptr &surface) { DHLOGI("%s: SetOutputSurface.", LOG_TAG); - if (videoDecoder_ == nullptr) { - DHLOGE("%s: Decoder is null.", LOG_TAG); + if (videoDecoder_ == nullptr || surface == nullptr) { + DHLOGE("%s: Decoder or surface is null.", LOG_TAG); return ERR_DH_SCREEN_TRANS_NULL_VALUE; } @@ -216,6 +216,10 @@ int32_t ImageSinkDecoder::SetOutputSurface(sptr &surface) int32_t ImageSinkDecoder::InputScreenData(const std::shared_ptr &data) { + if (data == nullptr) { + DHLOGE("%s: InputScreenData failed, data is nullptr.", LOG_TAG); + return ERR_DH_SCREEN_TRANS_NULL_VALUE; + } DHLOGD("%s: InputScreenData.", LOG_TAG); std::lock_guard dataLock(dataMutex_); while (videoDataQueue_.size() >= DATA_QUEUE_MAX_SIZE) { @@ -327,8 +331,8 @@ void ImageSinkDecoder::DecodeScreenData() int32_t ImageSinkDecoder::ProcessData(const std::shared_ptr &screenData, const int32_t bufferIndex) { DHLOGI("%s: ProcessData.", LOG_TAG); - if (videoDecoder_ == nullptr) { - DHLOGE("%s: Decoder is null.", LOG_TAG); + if (videoDecoder_ == nullptr || screenData == nullptr) { + DHLOGE("%s: Decoder or screenData is null.", LOG_TAG); return ERR_DH_SCREEN_TRANS_NULL_VALUE; } diff --git a/services/screentransport/screensinkprocessor/src/image_sink_processor.cpp b/services/screentransport/screensinkprocessor/src/image_sink_processor.cpp index 6cc0e46b657c43ade4d16f2b83c7bbb535137a69..7059fc7b444840a65abad3a436d7a39aebededbb 100644 --- a/services/screentransport/screensinkprocessor/src/image_sink_processor.cpp +++ b/services/screentransport/screensinkprocessor/src/image_sink_processor.cpp @@ -107,8 +107,8 @@ int32_t ImageSinkProcessor::StopImageProcessor() int32_t ImageSinkProcessor::SetImageSurface(sptr &surface) { DHLOGI("%s: SetImageSurface.", LOG_TAG); - if (imageDecoder_ == nullptr) { - DHLOGE("%s: Decoder is null.", LOG_TAG); + if (imageDecoder_ == nullptr || surface == nullptr) { + DHLOGE("%s: Decoder or surface is null.", LOG_TAG); ReportOptFail(DSCREEN_OPT_FAIL, ERR_DH_SCREEN_TRANS_NULL_VALUE, "SetImageSurface Decoder is null."); return ERR_DH_SCREEN_TRANS_NULL_VALUE; } @@ -126,8 +126,8 @@ int32_t ImageSinkProcessor::SetImageSurface(sptr &surface) int32_t ImageSinkProcessor::ProcessImage(const std::shared_ptr &data) { DHLOGI("%s: ProcessImage.", LOG_TAG); - if (imageDecoder_ == nullptr) { - DHLOGE("%s: Decoder is null.", LOG_TAG); + if (imageDecoder_ == nullptr || data == nullptr) { + DHLOGE("%s: Decoder or data is null.", LOG_TAG); ReportOptFail(DSCREEN_OPT_FAIL, ERR_DH_SCREEN_TRANS_NULL_VALUE, "processImage Decoder is null."); return ERR_DH_SCREEN_TRANS_NULL_VALUE; } diff --git a/services/screentransport/screensinktrans/src/screen_sink_trans.cpp b/services/screentransport/screensinktrans/src/screen_sink_trans.cpp index f574ad101f251bc7721ac4d06b752b02815f5c9d..8cbcc9dc6b705d55b5a3d6fa6ae5ee5450fd3859 100644 --- a/services/screentransport/screensinktrans/src/screen_sink_trans.cpp +++ b/services/screentransport/screensinktrans/src/screen_sink_trans.cpp @@ -73,8 +73,8 @@ int32_t ScreenSinkTrans::Release() int32_t ScreenSinkTrans::Start() { DHLOGI("%s: Start.", LOG_TAG); - if (imageProcessor_ == nullptr || screenChannel_ == nullptr) { - DHLOGE("%s: Processor or channel is null, Setup first.", LOG_TAG); + if (imageProcessor_ == nullptr) { + DHLOGE("%s: Processor is null, Setup first.", LOG_TAG); return ERR_DH_SCREEN_TRANS_NULL_VALUE; } @@ -251,6 +251,10 @@ int32_t ScreenSinkTrans::RegisterChannelListener() int32_t ScreenSinkTrans::RegisterProcessorListener(const VideoParam &localParam, const VideoParam &remoteParam, const std::string &peerDevId) { + if (imageProcessor_ == nullptr || decoderSurface_ == nullptr) { + DHLOGE("%s: imageProcessor_ or decoderSurface_ is nullptr.", LOG_TAG); + return ERR_DH_SCREEN_TRANS_NULL_VALUE; + } DHLOGI("%s: RegisterProcessorListener.", LOG_TAG); std::shared_ptr listener = shared_from_this(); if (listener == nullptr) { @@ -291,6 +295,10 @@ void ScreenSinkTrans::OnSessionClosed() void ScreenSinkTrans::OnDataReceived(const std::shared_ptr &data) { + if (imageProcessor_ == nullptr || data == nullptr) { + DHLOGE("%s: imageProcessor_ or data is nullptr.", LOG_TAG); + return; + } DHLOGD("%s: OnChannelDataReceived.", LOG_TAG); int32_t ret = imageProcessor_->ProcessImage(data); if (ret != DH_SUCCESS) { diff --git a/services/screentransport/screensourceprocessor/src/image_source_processor.cpp b/services/screentransport/screensourceprocessor/src/image_source_processor.cpp index 077fb2f24c1295eac11cfb306031c7cae4b76b95..93d1b6227c5a1987b1e4bf5416b06380ab86daff 100644 --- a/services/screentransport/screensourceprocessor/src/image_source_processor.cpp +++ b/services/screentransport/screensourceprocessor/src/image_source_processor.cpp @@ -27,7 +27,6 @@ int32_t ImageSourceProcessor::ConfigureImageProcessor(const VideoParam &localPar { DHLOGI("%s: ConfigureImageProcessor.", LOG_TAG); imageEncoder_ = std::make_shared(listener); - int32_t ret = imageEncoder_->ConfigureEncoder(localParam); if (ret != DH_SUCCESS) { DHLOGE("%s: Configure screen encoder failed ret: %d.", LOG_TAG, ret); diff --git a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp index b46522eaf9a11aaa93463e24c5e582ad4a3e7d77..6314166094b697bd8b8f1c0e1ec17e3f0311f1c3 100644 --- a/services/screentransport/screensourcetrans/src/screen_source_trans.cpp +++ b/services/screentransport/screensourcetrans/src/screen_source_trans.cpp @@ -80,8 +80,8 @@ int32_t ScreenSourceTrans::Release() int32_t ScreenSourceTrans::Start() { DHLOGI("%s: Start.", LOG_TAG); - if (imageProcessor_ == nullptr || screenChannel_ == nullptr) { - DHLOGE("%s: Processor or channel is null, Setup first.", LOG_TAG); + if (screenChannel_ == nullptr) { + DHLOGE("%s: channel is null, Setup first.", LOG_TAG); return ERR_DH_SCREEN_TRANS_NULL_VALUE; }