diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/BUILD.gn b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/BUILD.gn index 7a3d8a8894b3f5f13141dc6297419743a8457ec9..70ab23ddea5c8bd5a284e709b17a8b49579e22e2 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/BUILD.gn +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/BUILD.gn @@ -72,6 +72,7 @@ ohos_fuzztest("SinkServiceCloseChannelFuzzTest") { "cJSON:cjson", "c_utils:utils", "device_manager:devicemanagersdk", + "distributed_hardware_fwk:distributedhardwareutils", "drivers_interface_distributed_camera:libdistributed_camera_provider_proxy_1.0", "graphic_surface:surface", "hilog:libhilog", diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/sinkserviceclosechannel_fuzzer.cpp b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/sinkserviceclosechannel_fuzzer.cpp index c31ad954e3d788dcc5ea0e360dfc788a10454661..ddbccb8be967531145b41bb526c2a9826a903e11 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/sinkserviceclosechannel_fuzzer.cpp +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceclosechannel_fuzzer/sinkserviceclosechannel_fuzzer.cpp @@ -18,6 +18,8 @@ #include #include +#include "dcamera_sink_controller.h" +#include "dcamera_sink_access_control.h" #include "dcamera_sink_callback.h" #include "distributed_camera_constants.h" #include "distributed_camera_sink_service.h" @@ -37,6 +39,8 @@ void SinkServiceCloseChannelFuzzTest(const uint8_t* data, size_t size) std::make_shared(DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, true); sptr sinkCallback(new DCameraSinkCallback()); std::shared_ptr sinkDevice = std::make_shared(dhId, sinkCallback); + sinkDevice->accessControl_ = std::make_shared(); + sinkDevice->controller_ = std::make_shared(sinkDevice->accessControl_, sinkCallback); sinkService->camerasMap_.emplace(dhId, sinkDevice); sinkService->CloseChannel(dhId); } diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/BUILD.gn b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/BUILD.gn index d61f24912837bf71fc1c9589c08e4efeccf8e017..f823ef369f1c9c4de4b4daa2a8f78d287084acc7 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/BUILD.gn +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/BUILD.gn @@ -71,6 +71,7 @@ ohos_fuzztest("SinkServiceGetCameraInfoFuzzTest") { "cJSON:cjson", "c_utils:utils", "device_manager:devicemanagersdk", + "distributed_hardware_fwk:distributedhardwareutils", "drivers_interface_distributed_camera:libdistributed_camera_provider_proxy_1.0", "graphic_surface:surface", "hilog:libhilog", diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/sinkservicegetcamerainfo_fuzzer.cpp b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/sinkservicegetcamerainfo_fuzzer.cpp index 430930b03952c61f32c9280f0d4877cfc8b01e5b..b602abfb368dfa3d1e80093dea636a3524c08466 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/sinkservicegetcamerainfo_fuzzer.cpp +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicegetcamerainfo_fuzzer/sinkservicegetcamerainfo_fuzzer.cpp @@ -18,6 +18,8 @@ #include #include +#include "dcamera_sink_controller.h" +#include "dcamera_sink_access_control.h" #include "dcamera_sink_callback.h" #include "distributed_camera_constants.h" #include "distributed_camera_sink_service.h" @@ -39,6 +41,8 @@ void SinkServiceGetCameraInfoFuzzTest(const uint8_t* data, size_t size) std::make_shared(DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, true); sptr sinkCallback(new DCameraSinkCallback()); std::shared_ptr sinkDevice = std::make_shared(dhId, sinkCallback); + sinkDevice->accessControl_ = std::make_shared(); + sinkDevice->controller_ = std::make_shared(sinkDevice->accessControl_, sinkCallback); sinkService->camerasMap_.emplace(dhId, sinkDevice); sinkService->GetCameraInfo(dhId, cameraInfo); sinkService->GetCamIds(); diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/BUILD.gn b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/BUILD.gn index f3c08bc7a682ce3553a05d911305c09aeb28775b..3ec44db3e0cbadf553419e5141eb0ad77935fd44 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/BUILD.gn +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/BUILD.gn @@ -71,6 +71,7 @@ ohos_fuzztest("SinkServiceInitSinkFuzzTest") { "cJSON:cjson", "c_utils:utils", "device_manager:devicemanagersdk", + "distributed_hardware_fwk:distributedhardwareutils", "drivers_interface_distributed_camera:libdistributed_camera_provider_proxy_1.0", "graphic_surface:surface", "hilog:libhilog", diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/sinkserviceinitsink_fuzzer.cpp b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/sinkserviceinitsink_fuzzer.cpp index b245040d4cee941f12492304a1f9926f14e7e901..59e3dbbf1aa1f583dcaf5f0e2e3993935227c432 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/sinkserviceinitsink_fuzzer.cpp +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkserviceinitsink_fuzzer/sinkserviceinitsink_fuzzer.cpp @@ -18,6 +18,8 @@ #include #include +#include "dcamera_sink_controller.h" +#include "dcamera_sink_access_control.h" #include "dcamera_sink_callback.h" #include "distributed_camera_constants.h" #include "distributed_camera_sink_service.h" @@ -33,14 +35,15 @@ void SinkServiceInitSinkFuzzTest(const uint8_t* data, size_t size) } std::string param(reinterpret_cast(data), size); + std::string dhId = "1"; std::shared_ptr sinkService = std::make_shared(DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, true); sptr sinkCallback(new DCameraSinkCallback()); - sinkService->registerToService_ = false; + std::shared_ptr sinkDevice = std::make_shared(dhId, sinkCallback); + sinkDevice->accessControl_ = std::make_shared(); + sinkDevice->controller_ = std::make_shared(sinkDevice->accessControl_, sinkCallback); sinkService->InitSink(param, sinkCallback); - sinkService->Init(); - sinkService->OnStop(); } } } diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/BUILD.gn b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/BUILD.gn index 87869524cc3042097f8a820001c29729d1225098..eaa3645b617f48f813816c2aec7d6def1468bc7f 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/BUILD.gn +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/BUILD.gn @@ -71,6 +71,7 @@ ohos_fuzztest("SinkServiceStopCaptureFuzzTest") { "cJSON:cjson", "c_utils:utils", "device_manager:devicemanagersdk", + "distributed_hardware_fwk:distributedhardwareutils", "drivers_interface_distributed_camera:libdistributed_camera_provider_proxy_1.0", "graphic_surface:surface", "hilog:libhilog", diff --git a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/sinkservicestopcapture_fuzzer.cpp b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/sinkservicestopcapture_fuzzer.cpp index 3c764e0001518500e0f65303073566294fdb2ae6..5dce7311ae8c33c299da2cc2abcac0072a2e71f2 100644 --- a/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/sinkservicestopcapture_fuzzer.cpp +++ b/interfaces/inner_kits/native_cpp/test/sinkfuzztest/sinkservicestopcapture_fuzzer/sinkservicestopcapture_fuzzer.cpp @@ -18,6 +18,8 @@ #include #include +#include "dcamera_sink_controller.h" +#include "dcamera_sink_access_control.h" #include "dcamera_sink_callback.h" #include "distributed_camera_constants.h" #include "distributed_camera_sink_service.h" @@ -37,6 +39,8 @@ void SinkServiceStopCaptureFuzzTest(const uint8_t* data, size_t size) std::make_shared(DISTRIBUTED_HARDWARE_CAMERA_SINK_SA_ID, true); sptr sinkCallback(new DCameraSinkCallback()); std::shared_ptr sinkDevice = std::make_shared(dhId, sinkCallback); + sinkDevice->accessControl_ = std::make_shared(); + sinkDevice->controller_ = std::make_shared(sinkDevice->accessControl_, sinkCallback); sinkService->camerasMap_.emplace(dhId, sinkDevice); sinkService->StopCapture(dhId); diff --git a/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp b/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp index dc8bbd2b48a38871b224efcd5dc8d6a21e1e4882..8e524a2878842a22f810751278762e805bb8fb9e 100644 --- a/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp +++ b/services/cameraservice/sinkservice/src/distributedcameramgr/dcamera_sink_controller.cpp @@ -85,6 +85,9 @@ int32_t DCameraSinkController::StopCapture() { DHLOGI("StopCapture dhId: %{public}s", GetAnonyString(dhId_).c_str()); std::lock_guard autoLock(captureLock_); + if (operator_ == nullptr) { + return DCAMERA_BAD_VALUE; + } int32_t ret = operator_->StopCapture(); if (ret != DCAMERA_OK) { DHLOGE("client stop capture failed, dhId: %{public}s, ret: %{public}d", @@ -92,7 +95,9 @@ int32_t DCameraSinkController::StopCapture() DCameraNotifyInner(DCAMERA_MESSAGE, DCAMERA_EVENT_DEVICE_ERROR, std::string("operator stop capture failed.")); return ret; } - + if (output_ == nullptr) { + return DCAMERA_BAD_VALUE; + } ret = output_->StopCapture(); if (ret != DCAMERA_OK) { DHLOGE("output stop capture failed, dhId: %{public}s, ret: %{public}d", @@ -264,6 +269,9 @@ int32_t DCameraSinkController::CloseChannel() DCameraLowLatency::GetInstance().DisableLowLatency(); DCameraSinkServiceIpc::GetInstance().DeleteSourceRemoteCamSrv(srcDevId_); srcDevId_.clear(); + if (channel_ == nullptr) { + return DCAMERA_BAD_VALUE; + } int32_t ret = channel_->ReleaseSession(); if (ret != DCAMERA_OK) { DHLOGE("DCameraSinkController release channel failed, dhId: %{public}s, ret: %{public}d",