]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Protection against sigsegv using DataArrayInt::invertArrayO2N2N2O in case on invalid...
authorageay <ageay>
Mon, 19 Aug 2013 10:55:11 +0000 (10:55 +0000)
committerageay <ageay>
Mon, 19 Aug 2013 10:55:11 +0000 (10:55 +0000)
src/MEDCoupling/MEDCouplingMemArray.cxx

index 9c2fda8fa2970156c018b98427efe2e7928d62e9..92777b41972c3fbc8b9243e3b1290cb1da84c41b 100644 (file)
@@ -6202,8 +6202,19 @@ DataArrayInt *DataArrayInt::invertArrayO2N2N2O(int newNbOfElem) const
   const int *old2New=getConstPointer();
   int *pt=ret->getPointer();
   for(int i=0;i!=nbOfOldNodes;i++)
-    if(old2New[i]!=-1)
-      pt[old2New[i]]=i;
+    {
+      int newp(old2New[i]);
+      if(newp!=-1)
+        {
+          if(newp>=0 && newp<newNbOfElem)
+            pt[newp]=i;
+          else
+            {
+              std::ostringstream oss; oss << "DataArrayInt::invertArrayO2N2N2O : At place #" << i << " the newplace is " << newp << " must be in [0," << newNbOfElem << ") !";
+              throw INTERP_KERNEL::Exception(oss.str().c_str());
+            }
+        }
+    }
   return ret.retn();
 }
 
@@ -6219,8 +6230,19 @@ DataArrayInt *DataArrayInt::invertArrayO2N2N2OBis(int newNbOfElem) const throw(I
   const int *old2New=getConstPointer();
   int *pt=ret->getPointer();
   for(int i=nbOfOldNodes-1;i>=0;i--)
-    if(old2New[i]!=-1)
-      pt[old2New[i]]=i;
+    {
+      int newp(old2New[i]);
+      if(newp!=-1)
+        {
+          if(newp>=0 && newp<newNbOfElem)
+            pt[newp]=i;
+          else
+            {
+              std::ostringstream oss; oss << "DataArrayInt::invertArrayO2N2N2OBis : At place #" << i << " the newplace is " << newp << " must be in [0," << newNbOfElem << ") !";
+              throw INTERP_KERNEL::Exception(oss.str().c_str());
+            }
+        }
+    }
   return ret.retn();
 }