topomanager: Assert valid user input
authorRamprasad Venkataraman <ramv@illinois.edu>
Wed, 27 Oct 2010 23:34:49 +0000 (18:34 -0500)
committerRamprasad Venkataraman <ramv@illinois.edu>
Wed, 27 Oct 2010 23:35:36 +0000 (18:35 -0500)
src/util/TopoManager.C

index ec3b3fa211543684aadf7cdee195f1569eaf72a4..2d5e127d0070fe6a0916f780b78bbc4390a13ca5 100644 (file)
@@ -133,6 +133,7 @@ int TopoManager::hasMultipleProcsPerNode() const {
 }
 
 void TopoManager::rankToCoordinates(int pe, int &x, int &y, int &z) {
+  CkAssert( pe >= 0 && pe < CkNumPes() );
 #if CMK_BLUEGENEL
   bgltm.rankToCoordinates(pe, x, y, z);
 #elif CMK_BLUEGENEP
@@ -169,6 +170,7 @@ void TopoManager::rankToCoordinates(int pe, int &x, int &y, int &z) {
 }
 
 void TopoManager::rankToCoordinates(int pe, int &x, int &y, int &z, int &t) {
+  CkAssert( pe >= 0 && pe < CkNumPes() );
 #if CMK_BLUEGENEL
   bgltm.rankToCoordinates(pe, x, y, z, t);
 #elif CMK_BLUEGENEP
@@ -207,6 +209,7 @@ void TopoManager::rankToCoordinates(int pe, int &x, int &y, int &z, int &t) {
 }
 
 int TopoManager::coordinatesToRank(int x, int y, int z) {
+  CkAssert( x>=0 && x<dimX && y>=0 && y<dimY && z>=0 && z<dimZ );
 #if CMK_BLUEGENE_CHARM
   if(dimY > 1)
     return x + y*dimX + z*dimX*dimY;
@@ -229,6 +232,7 @@ int TopoManager::coordinatesToRank(int x, int y, int z) {
 }
 
 int TopoManager::coordinatesToRank(int x, int y, int z, int t) {
+  CkAssert( x>=0 && x<dimNX && y>=0 && y<dimNY && z>=0 && z<dimNZ && t>=0 && t<dimNT );
 #if CMK_BLUEGENE_CHARM
   if(dimNY > 1)
     return t + (x + (y + z*dimNY) * dimNX) * dimNT;
@@ -253,6 +257,8 @@ int TopoManager::coordinatesToRank(int x, int y, int z, int t) {
 }
 
 int TopoManager::getHopsBetweenRanks(int pe1, int pe2) {
+  CkAssert( pe1 >= 0 && pe1 < CkNumPes() );
+  CkAssert( pe2 >= 0 && pe2 < CkNumPes() );
   int x1, y1, z1, x2, y2, z2, t1, t2;
   rankToCoordinates(pe1, x1, y1, z1, t1);
   rankToCoordinates(pe2, x2, y2, z2, t2);
@@ -260,6 +266,7 @@ int TopoManager::getHopsBetweenRanks(int pe1, int pe2) {
 }
 
 void TopoManager::sortRanksByHops(int pe, int *pes, int *idx, int n) {
+  CkAssert( pe >= 0 && pe < CkNumPes() );
   int minHops = getHopsBetweenRanks(pe, pes[0]);
   int minIdx = 0;
   int nowHops, tmp;
@@ -280,6 +287,7 @@ int TopoManager::pickClosestRank(int mype, int *pes, int n) {
 */
 
 int TopoManager::pickClosestRank(int mype, int *pes, int n){
+  CkAssert( mype >= 0 && mype < CkNumPes() );
   int minHops = getHopsBetweenRanks(mype, pes[0]);
   int minIdx=0;
   int nowHops;