Fix coverity issue : Ensure Collidable class is not null 93/316493/2
authorEunki, Hong <eunkiki.hong@samsung.com>
Thu, 22 Aug 2024 06:38:14 +0000 (15:38 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Thu, 22 Aug 2024 07:12:26 +0000 (16:12 +0900)
For current usage, Collidable never be nullptr. And also
we don't allow to input null pointer into processor.

To ensure that input Collidable is not null, let we use reference arguments.

Change-Id: I66d8614610b75cfc6fb5ae9861329e4f06f9daf8
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali-scene3d/utc-Dali-NavigationMesh.cpp
dali-scene3d/internal/controls/model/model-impl.cpp
dali-scene3d/internal/event/collider-mesh-processor-impl.cpp
dali-scene3d/internal/event/collider-mesh-processor-impl.h
dali-scene3d/internal/event/collider-mesh-processor.cpp
dali-scene3d/internal/event/collider-mesh-processor.h

index b2ccb7f..a6d4659 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -851,5 +851,25 @@ int UtcDaliColliderMeshModelNodeRemoveModelNode(void)
   model.AddModelNode(node);
   DALI_TEST_EQUALS(node.HasColliderMesh(), true, TEST_LOCATION);
 
+  // Scene off model, and add,remove model node.
+  model.Unparent();
+  DALI_TEST_EQUALS(node.HasColliderMesh(), true, TEST_LOCATION);
+
+  model.RemoveModelNode(node);
+  DALI_TEST_EQUALS(node.HasColliderMesh(), true, TEST_LOCATION);
+
+  model.AddModelNode(node);
+  DALI_TEST_EQUALS(node.HasColliderMesh(), true, TEST_LOCATION);
+
+  // Reset collider mesh
+  node.SetColliderMesh(nullptr);
+  DALI_TEST_EQUALS(node.HasColliderMesh(), false, TEST_LOCATION);
+
+  model.RemoveModelNode(node);
+  DALI_TEST_EQUALS(node.HasColliderMesh(), false, TEST_LOCATION);
+
+  model.AddModelNode(node);
+  DALI_TEST_EQUALS(node.HasColliderMesh(), false, TEST_LOCATION);
+
   END_TEST;
 }
\ No newline at end of file
index 83d1aac..bd911c5 100644 (file)
@@ -293,7 +293,7 @@ void Model::AddModelNode(Scene3D::ModelNode modelNode)
   if(modelNode.HasColliderMesh())
   {
     RegisterColliderMesh(modelNode);
-    Scene3D::ColliderMeshProcessor::Get().ColliderMeshChanged(this);
+    Scene3D::ColliderMeshProcessor::Get().ColliderMeshChanged(*this);
   }
 
   if(Self().GetProperty<bool>(Dali::Actor::Property::CONNECTED_TO_SCENE))
@@ -307,7 +307,7 @@ void Model::RegisterColliderMesh(Scene3D::ModelNode& modelNode)
   mColliderMeshes[modelNode.GetProperty<int>(Actor::Property::ID)] = modelNode;
 
   // Add processor
-  Scene3D::ColliderMeshProcessor::Get().ColliderMeshChanged(this);
+  Scene3D::ColliderMeshProcessor::Get().ColliderMeshChanged(*this);
 }
 
 void Model::RemoveColliderMesh(Scene3D::ModelNode& node)
@@ -796,7 +796,6 @@ bool Model::IsShadowReceiving() const
   return mIsShadowReceiving;
 }
 
-
 ///////////////////////////////////////////////////////////
 //
 // Private methods
index 58ece0c..a49fd4b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -132,24 +132,19 @@ ColliderMeshProcessor::~ColliderMeshProcessor()
   }
 }
 
-void ColliderMeshProcessor::ColliderMeshChanged(Collidable* collidable)
+void ColliderMeshProcessor::ColliderMeshChanged(Collidable& collidable)
 {
-  if(!collidable)
-  {
-    DALI_LOG_ERROR("The collider should not be null.\n");
-  }
-
-  Actor actor = collidable->GetCollidableActor();
+  Actor actor = collidable.GetCollidableActor();
   if(actor)
   {
     if(actor.GetProperty<bool>(Actor::Property::CONNECTED_TO_SCENE))
     {
-      AddSceneViewParentToProcessingQueue(collidable->GetCollidableActor());
+      AddSceneViewParentToProcessingQueue(collidable.GetCollidableActor());
     }
     else
     {
       // TODO: Check if signal already connected
-      collidable->GetCollidableActor().OnSceneSignal().Connect(this, &ColliderMeshProcessor::ModelOnScene);
+      collidable.GetCollidableActor().OnSceneSignal().Connect(this, &ColliderMeshProcessor::ModelOnScene);
     }
   }
 }
index 7123d87..b281589 100644 (file)
@@ -1,7 +1,7 @@
 #pragma once
 
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -40,7 +40,7 @@ public:
 
   ~ColliderMeshProcessor();
 
-  void ColliderMeshChanged(Collidable* collidable);
+  void ColliderMeshChanged(Collidable& collidable);
 
 private:
   void ModelOnScene(Actor actor);
index 9dec202..c4fbc28 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ ColliderMeshProcessor ColliderMeshProcessor::Get()
   return processor;
 }
 
-void ColliderMeshProcessor::ColliderMeshChanged(Collidable* collidable)
+void ColliderMeshProcessor::ColliderMeshChanged(Collidable& collidable)
 {
   GetImpl(*this).ColliderMeshChanged(collidable);
 }
index 0a5191f..8ccb6b9 100644 (file)
@@ -1,7 +1,7 @@
 #pragma once
 
 /*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,9 +19,9 @@
 
 // EXTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-impl.h>
+#include <dali/integration-api/debug.h>
 #include <dali/public-api/object/base-handle.h>
 #include <dali/public-api/object/weak-handle.h>
-#include <dali/integration-api/debug.h>
 
 // INTERNAL INCLUDES
 #include <dali-scene3d/public-api/controls/model/model.h>
@@ -61,7 +61,7 @@ public:
 
   static ColliderMeshProcessor Get();
 
-  void ColliderMeshChanged(Collidable* collidable);
+  void ColliderMeshChanged(Collidable& collidable);
 
 private:
   explicit ColliderMeshProcessor(Internal::ColliderMeshProcessor* impl);