summaryrefslogtreecommitdiff
path: root/modules/bullet
diff options
context:
space:
mode:
authorDuddino <duddinogatto@pm.me>2021-03-06 12:01:09 +0100
committerDuddino <duddinogatto@pm.me>2021-03-06 12:07:27 +0100
commitc47070e1657913d6a79fd5eaa81e588fe7146932 (patch)
treee0fcf7967854526c16d1579f9e8d512669adb176 /modules/bullet
parent17e66382b8e50cf7b58b8ecf4c12628408529538 (diff)
Added some checks to prevent accessing a null collider
Previously godot would try to access `CollisionObjectBullet::bt_collision_object` even if it was null. Fixes #46651
Diffstat (limited to 'modules/bullet')
-rw-r--r--modules/bullet/collision_object_bullet.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/modules/bullet/collision_object_bullet.cpp b/modules/bullet/collision_object_bullet.cpp
index bce8ec8076..d9f5beb5a1 100644
--- a/modules/bullet/collision_object_bullet.cpp
+++ b/modules/bullet/collision_object_bullet.cpp
@@ -148,6 +148,9 @@ void CollisionObjectBullet::add_collision_exception(const CollisionObjectBullet
void CollisionObjectBullet::remove_collision_exception(const CollisionObjectBullet *p_ignoreCollisionObject) {
exceptions.erase(p_ignoreCollisionObject->get_self());
+ if (!bt_collision_object) {
+ return;
+ }
bt_collision_object->setIgnoreCollisionCheck(p_ignoreCollisionObject->bt_collision_object, false);
if (space) {
space->get_broadphase()->getOverlappingPairCache()->cleanProxyFromPairs(bt_collision_object->getBroadphaseHandle(), space->get_dispatcher());
@@ -155,11 +158,14 @@ void CollisionObjectBullet::remove_collision_exception(const CollisionObjectBull
}
bool CollisionObjectBullet::has_collision_exception(const CollisionObjectBullet *p_otherCollisionObject) const {
- return !bt_collision_object->checkCollideWith(p_otherCollisionObject->bt_collision_object);
+ return exceptions.has(p_otherCollisionObject->get_self());
}
void CollisionObjectBullet::set_collision_enabled(bool p_enabled) {
collisionsEnabled = p_enabled;
+ if (!bt_collision_object) {
+ return;
+ }
if (collisionsEnabled) {
bt_collision_object->setCollisionFlags(bt_collision_object->getCollisionFlags() & (~btCollisionObject::CF_NO_CONTACT_RESPONSE));
} else {