Salome HOME
fix access out of array bounds in FunctionTable::findBounds()
[modules/smesh.git] / src / StdMeshers / StdMeshers_Distribution.cxx
index 1223fc009e716220152d1c577951231b3729f23d..4fd04bea9c63ffae833cfb0dd7aede40c9e8cd6a 100644 (file)
@@ -17,7 +17,7 @@
 //  License along with this library; if not, write to the Free Software 
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 // 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
 //
@@ -122,10 +122,11 @@ double FunctionTable::integral( const int i ) const
 
 double FunctionTable::integral( const int i, const double d ) const
 {
-  double f, res = 0.0;
-  if( value( myData[2*i]+d, f ) )
-    res = ( myData[2*i+1] + f ) / 2.0 * d;
-
+  double f1,f2, res = 0.0;
+  if( value( myData[2*i]+d, f1 ) )
+    if(!value(myData[2*i], f2))
+      f2 = myData[2*i+1];
+  res = (f2+f1) * d / 2.0;
   return res;
 }
 
@@ -144,7 +145,7 @@ double FunctionTable::integral( const double a, const double b ) const
 
 bool FunctionTable::findBounds( const double x, int& x_ind_1, int& x_ind_2 ) const
 {
-  int n = myData.size();
+  int n = myData.size() / 2;
   if( n==0 || x<myData[0] )
   {
     x_ind_1 = x_ind_2 = 0;