Fix some array out-of-bounds access errors

Add an assert using MAX_DEGENERATE_STATS
Fixes Issue 561, thanks to jarno for the report
This commit is contained in:
erwin.coumans
2011-10-24 18:24:31 +00:00
parent a415ef6067
commit 14352169ab
2 changed files with 11 additions and 6 deletions

View File

@@ -621,8 +621,9 @@ void ProcessConvexConcaveSpuCollision(SpuCollisionPairInput* wuInput, CollisionT
}
int stats[11]={0,0,0,0,0,0,0,0,0,0,0};
int degenerateStats[11]={0,0,0,0,0,0,0,0,0,0,0};
#define MAX_DEGENERATE_STATS 15
int stats[MAX_DEGENERATE_STATS]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int degenerateStats[MAX_DEGENERATE_STATS]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
////////////////////////
@@ -759,7 +760,9 @@ void ProcessSpuConvexConvexCollision(SpuCollisionPairInput* wuInput, CollisionTa
btGjkPairDetector gjk(shape0Ptr,shape1Ptr,shapeType0,shapeType1,marginA,marginB,&simplexSolver,penetrationSolver);//&vsSolver,penetrationSolver);
gjk.getClosestPoints(cpInput,spuContacts,0);//,debugDraw);
btAssert(gjk.m_lastUsedMethod <MAX_DEGENERATE_STATS);
stats[gjk.m_lastUsedMethod]++;
btAssert(gjk.m_degenerateSimplex <MAX_DEGENERATE_STATS);
degenerateStats[gjk.m_degenerateSimplex]++;
#ifdef USE_SEPDISTANCE_UTIL

View File

@@ -1178,7 +1178,7 @@ btScalar btParallelConstraintSolver::solveGroup(btCollisionObject** bodies1,int
totalNumRows += info1.m_numConstraintRows;
}
m_tmpSolverNonContactConstraintPool.resize(totalNumRows);
offsetSolverConstraints = &m_tmpSolverNonContactConstraintPool[0];
offsetSolverConstraints =totalNumRows? &m_tmpSolverNonContactConstraintPool[0]:0;
///setup the btSolverConstraints
@@ -1303,7 +1303,9 @@ btScalar btParallelConstraintSolver::solveGroup(btCollisionObject** bodies1,int
pfxSetRigidBodyIdA(pair,idA);
pfxSetRigidBodyIdB(pair,idB);
//is this needed?
if (idA>=0)
pfxSetMotionMaskA(pair,m_memoryCache->m_mystates[idA].getMotionMask());
if (idB>=0)
pfxSetMotionMaskB(pair,m_memoryCache->m_mystates[idB].getMotionMask());
pfxSetActive(pair,true);