Fix for use of uninitialized variables.
m_implicitShapeDimensions was used in setMargin, called from setSafeMargin from constructors of btBoxShape, btCylinerShape and btBox2dShape, effectively using uninitialized variable and leading to floating point exceptions. It was working correctly only because in the same constructor m_implicitShapeDimensions was reinitialized after setSafeMargin. Properly initialize variable before use by first setting it up and only then using it in setSafeMargin.
This commit is contained in:
@@ -103,11 +103,12 @@ public:
|
|||||||
btScalar minDimension = boxHalfExtents.getX();
|
btScalar minDimension = boxHalfExtents.getX();
|
||||||
if (minDimension>boxHalfExtents.getY())
|
if (minDimension>boxHalfExtents.getY())
|
||||||
minDimension = boxHalfExtents.getY();
|
minDimension = boxHalfExtents.getY();
|
||||||
setSafeMargin(minDimension);
|
|
||||||
|
|
||||||
m_shapeType = BOX_2D_SHAPE_PROXYTYPE;
|
m_shapeType = BOX_2D_SHAPE_PROXYTYPE;
|
||||||
btVector3 margin(getMargin(),getMargin(),getMargin());
|
btVector3 margin(getMargin(),getMargin(),getMargin());
|
||||||
m_implicitShapeDimensions = (boxHalfExtents * m_localScaling) - margin;
|
m_implicitShapeDimensions = (boxHalfExtents * m_localScaling) - margin;
|
||||||
|
|
||||||
|
setSafeMargin(minDimension);
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual void setMargin(btScalar collisionMargin)
|
virtual void setMargin(btScalar collisionMargin)
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ btBoxShape::btBoxShape( const btVector3& boxHalfExtents)
|
|||||||
{
|
{
|
||||||
m_shapeType = BOX_SHAPE_PROXYTYPE;
|
m_shapeType = BOX_SHAPE_PROXYTYPE;
|
||||||
|
|
||||||
setSafeMargin(boxHalfExtents);
|
|
||||||
|
|
||||||
btVector3 margin(getMargin(),getMargin(),getMargin());
|
btVector3 margin(getMargin(),getMargin(),getMargin());
|
||||||
m_implicitShapeDimensions = (boxHalfExtents * m_localScaling) - margin;
|
m_implicitShapeDimensions = (boxHalfExtents * m_localScaling) - margin;
|
||||||
|
|
||||||
|
setSafeMargin(boxHalfExtents);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,11 @@ btCylinderShape::btCylinderShape (const btVector3& halfExtents)
|
|||||||
:btConvexInternalShape(),
|
:btConvexInternalShape(),
|
||||||
m_upAxis(1)
|
m_upAxis(1)
|
||||||
{
|
{
|
||||||
setSafeMargin(halfExtents);
|
|
||||||
|
|
||||||
btVector3 margin(getMargin(),getMargin(),getMargin());
|
btVector3 margin(getMargin(),getMargin(),getMargin());
|
||||||
m_implicitShapeDimensions = (halfExtents * m_localScaling) - margin;
|
m_implicitShapeDimensions = (halfExtents * m_localScaling) - margin;
|
||||||
|
|
||||||
|
setSafeMargin(halfExtents);
|
||||||
|
|
||||||
m_shapeType = CYLINDER_SHAPE_PROXYTYPE;
|
m_shapeType = CYLINDER_SHAPE_PROXYTYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user