summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerwincoumans <erwincoumans@google.com>2020-08-14 16:59:56 -0700
committerGitHub <noreply@github.com>2020-08-14 16:59:56 -0700
commit2c9a55da540b065a8cb0ad160179c7f46e5a27e1 (patch)
treeaa4caec6329def2e21faeddc1ea48dbb13bcb413
parent93624761c606f020d2aae96d2086af4bb668e529 (diff)
downloadbullet3-2c9a55da540b065a8cb0ad160179c7f46e5a27e1.tar.gz
Update PhysicsServerCommandProcessor.cpp
fix potential crash, if user doesn't provide valid body unique id in pybullet.setCollisionFilterGroupMask
-rw-r--r--examples/SharedMemory/PhysicsServerCommandProcessor.cpp37
1 files changed, 20 insertions, 17 deletions
diff --git a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
index 3fb7052ae..7b4193ac3 100644
--- a/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
+++ b/examples/SharedMemory/PhysicsServerCommandProcessor.cpp
@@ -6594,34 +6594,37 @@ bool PhysicsServerCommandProcessor::processCollisionFilterCommand(const struct S
if (clientCmd.m_updateFlags & B3_COLLISION_FILTER_GROUP_MASK)
{
InternalBodyData* body = m_data->m_bodyHandles.getHandle(clientCmd.m_collisionFilterArgs.m_bodyUniqueIdA);
- btCollisionObject* colObj = 0;
- if (body->m_multiBody)
+ if (body)
{
- if (clientCmd.m_collisionFilterArgs.m_linkIndexA == -1)
+ btCollisionObject* colObj = 0;
+ if (body->m_multiBody)
{
- colObj = body->m_multiBody->getBaseCollider();
+ if (clientCmd.m_collisionFilterArgs.m_linkIndexA == -1)
+ {
+ colObj = body->m_multiBody->getBaseCollider();
+ }
+ else
+ {
+ if (clientCmd.m_collisionFilterArgs.m_linkIndexA >= 0 && clientCmd.m_collisionFilterArgs.m_linkIndexA < body->m_multiBody->getNumLinks())
+ {
+ colObj = body->m_multiBody->getLinkCollider(clientCmd.m_collisionFilterArgs.m_linkIndexA);
+ }
+ }
}
else
{
- if (clientCmd.m_collisionFilterArgs.m_linkIndexA >= 0 && clientCmd.m_collisionFilterArgs.m_linkIndexA < body->m_multiBody->getNumLinks())
+ if (body->m_rigidBody)
{
- colObj = body->m_multiBody->getLinkCollider(clientCmd.m_collisionFilterArgs.m_linkIndexA);
+ colObj = body->m_rigidBody;
}
}
- }
- else
- {
- if (body->m_rigidBody)
+ if (colObj)
{
- colObj = body->m_rigidBody;
+ colObj->getBroadphaseHandle()->m_collisionFilterGroup = clientCmd.m_collisionFilterArgs.m_collisionFilterGroup;
+ colObj->getBroadphaseHandle()->m_collisionFilterMask = clientCmd.m_collisionFilterArgs.m_collisionFilterMask;
+ m_data->m_dynamicsWorld->refreshBroadphaseProxy(colObj);
}
}
- if (colObj)
- {
- colObj->getBroadphaseHandle()->m_collisionFilterGroup = clientCmd.m_collisionFilterArgs.m_collisionFilterGroup;
- colObj->getBroadphaseHandle()->m_collisionFilterMask = clientCmd.m_collisionFilterArgs.m_collisionFilterMask;
- m_data->m_dynamicsWorld->refreshBroadphaseProxy(colObj);
- }
}
}
return true;