From 5b2678a49f18b1863e342fa77f0dd0a7eb7d5576 Mon Sep 17 00:00:00 2001 From: MediaPipe Team Date: Fri, 3 Mar 2023 17:03:18 -0800 Subject: [PATCH] Add a CHECK for the cases when null service is accessed unconditionally. PiperOrigin-RevId: 513956583 --- mediapipe/framework/graph_service.h | 5 ++++- mediapipe/framework/graph_service_test.cc | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/mediapipe/framework/graph_service.h b/mediapipe/framework/graph_service.h index c4c64a852..51caf31f2 100644 --- a/mediapipe/framework/graph_service.h +++ b/mediapipe/framework/graph_service.h @@ -107,7 +107,10 @@ template class ServiceBinding { public: bool IsAvailable() { return service_ != nullptr; } - T& GetObject() { return *service_; } + T& GetObject() { + CHECK(service_) << "Service is unavailable."; + return *service_; + } ServiceBinding() {} explicit ServiceBinding(std::shared_ptr service) : service_(service) {} diff --git a/mediapipe/framework/graph_service_test.cc b/mediapipe/framework/graph_service_test.cc index ae0809ea5..69992f212 100644 --- a/mediapipe/framework/graph_service_test.cc +++ b/mediapipe/framework/graph_service_test.cc @@ -343,5 +343,19 @@ TEST(DisallowDefaultInitializationGraphServiceTest, HasSubstr("was not provided and cannot be created"))); } +TEST(ServiceBindingTest, CrashesWhenGettingNullServiceObject) { + ASSERT_DEATH( + { + ServiceBinding binding(nullptr); + (void)binding.GetObject(); + }, + testing::ContainsRegex("Check failed: [a-z_]* Service is unavailable")); +} + +TEST(ServiceBindingTest, IsAvailableReturnsFalsOnNullServiceObject) { + ServiceBinding binding(nullptr); + EXPECT_FALSE(binding.IsAvailable()); +} + } // namespace } // namespace mediapipe