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 b2ccb7f23410f53559f59862724ce2980d5ffb57..a6d46597a51d9179a1883c9a7dcc4e22efeb3ee5 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 83d1aacd8bcaab3cb2a94c21c0101f1a46f8bf96..bd911c5cbf9016024b816925373cb5cd560f7e33 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 58ece0cafd6f2302471d9c136173d93d27811e4f..a49fd4bf1883a787c1619347915739dd665c89e2 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 7123d870255278cd25afc85eeca9430a16f5557a..b28158919b43ba52584fc07ffa87cb30fe25fd55 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 9dec202e5fb3c650c3f5fead77b387a77d1a4984..c4fbc28fb9c6bdbd164a1448442292c64618f808 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 0a5191fb51182ef984e9f72acbf47592d794f6a4..8ccb6b956481d4f6199e04827658ef1754b3ca72 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);