[Service] condition to validate handle
authorJaeyun Jung <jy1210.jung@samsung.com>
Tue, 5 Mar 2024 04:49:04 +0000 (13:49 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Tue, 5 Mar 2024 09:12:15 +0000 (18:12 +0900)
Check priv data when validating ml-service handle.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
c/src/ml-api-service-common.c
tests/capi/unittest_capi_service_agent_client.cc

index da85c95..8c91aff 100644 (file)
@@ -28,6 +28,18 @@ _ml_service_handle_is_valid (ml_service_s * mls)
   if (mls->magic != ML_SERVICE_MAGIC)
     return FALSE;
 
+  switch (mls->type) {
+    case ML_SERVICE_TYPE_SERVER_PIPELINE:
+    case ML_SERVICE_TYPE_CLIENT_QUERY:
+    case ML_SERVICE_TYPE_REMOTE:
+      if (mls->priv == NULL)
+        return FALSE;
+      break;
+    default:
+      /* Invalid handle type. */
+      return FALSE;
+  }
+
   return TRUE;
 }
 
index 67eb75a..eef0c7c 100644 (file)
@@ -500,16 +500,26 @@ TEST_F (MLServiceAgentTest, destroy_00_n)
 TEST_F (MLServiceAgentTest, destroy_01_n)
 {
   int status;
-  ml_service_s *mls = _ml_service_create_internal (ML_SERVICE_TYPE_SERVER_PIPELINE);
-  ASSERT_TRUE (mls != NULL);
+  ml_service_h h;
+
+  status = ml_service_set_pipeline ("key", "videotestsrc ! fakesink");
+  EXPECT_EQ (ML_ERROR_NONE, status);
+
+  status = ml_service_launch_pipeline ("key", &h);
+  EXPECT_EQ (ML_ERROR_NONE, status);
+
+  ml_service_s *mls = (ml_service_s *) h;
 
   /* invalid type */
   mls->type = ML_SERVICE_TYPE_MAX;
-  status = ml_service_destroy ((ml_service_h) mls);
+  status = ml_service_destroy (h);
   EXPECT_EQ (ML_ERROR_INVALID_PARAMETER, status);
 
   mls->type = ML_SERVICE_TYPE_SERVER_PIPELINE;
-  status = ml_service_destroy ((ml_service_h) mls);
+  status = ml_service_destroy (h);
+  EXPECT_EQ (ML_ERROR_NONE, status);
+
+  status = ml_service_delete_pipeline ("key");
   EXPECT_EQ (ML_ERROR_NONE, status);
 }