From 15057cb23025ae8c81c6c1fe5a5de07121e1b86a Mon Sep 17 00:00:00 2001
From: Jonathan Lambrechts <jonathan.lambrechts@uclouvain.be>
Date: Fri, 11 May 2012 13:18:24 +0000
Subject: [PATCH] OptHOM : remove 2 invalid read

---
 Common/Context.cpp                            | 1 +
 Numeric/polynomialBasis.h                     | 3 ++-
 contrib/HighOrderMeshOptimizer/OptHomMesh.cpp | 3 ++-
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/Common/Context.cpp b/Common/Context.cpp
index 64cb56103c..a4fc1b82ae 100644
--- a/Common/Context.cpp
+++ b/Common/Context.cpp
@@ -81,6 +81,7 @@ CTX::CTX()
   mesh.numSubEdges = 0;
   mesh.colorCarousel = 0;
   mesh.ignorePartBound = 0;
+  mesh.saveTri = 1;
   color.mesh.tangents = color.mesh.tetrahedron = color.mesh.triangle = 0;
   color.mesh.prism = color.mesh.pyramid = color.mesh.hexahedron = 0;
   color.mesh.tangents = color.mesh.line = color.mesh.quadrangle = 0;
diff --git a/Numeric/polynomialBasis.h b/Numeric/polynomialBasis.h
index 9d502e9e7c..7b1988c4e8 100644
--- a/Numeric/polynomialBasis.h
+++ b/Numeric/polynomialBasis.h
@@ -154,8 +154,9 @@ class polynomialBasis
     double dfv[1256][3];
     dfm.resize (coefficients.size1(), coord.size1() * 3, false);
     int ii = 0;
+    int dimCoord = coord.size2();
     for (int iPoint=0; iPoint< coord.size1(); iPoint++) {
-      df(coord(iPoint,0), coord(iPoint, 1), coord(iPoint, 2), dfv);
+      df(coord(iPoint,0), dimCoord > 1 ? coord(iPoint, 1) : 0., dimCoord > 2 ? coord(iPoint, 2) : 0., dfv);
       for (int i = 0; i < coefficients.size1(); i++) {
         dfm(i, iPoint * 3 + 0) = dfv[i][0];
         dfm(i, iPoint * 3 + 1) = dfv[i][1];
diff --git a/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp b/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp
index f386ff6854..f8174b5eb3 100644
--- a/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomMesh.cpp
@@ -297,9 +297,10 @@ void Mesh::distSqToStraight(std::vector<double> &dSq)
     for (int i = 0; i < nV1; ++i) {
       sxyz[_el2V[iEl][i]] = _vert[_el2V[iEl][i]]->point();
     }
+    int dim = lagrange->points.size2();
     for (int i = nV1; i < nV; ++i) {
       double f[256];
-      lagrange1->f(lagrange->points(i, 0), lagrange->points(i, 1), lagrange->points(i, 2), f);
+      lagrange1->f(lagrange->points(i, 0), dim > 1 ? lagrange->points(i, 1) : 0., dim > 2 ? lagrange->points(i, 2) : 0., f);
       for (int j = 0; j < nV1; ++j)
         sxyz[_el2V[iEl][i]] += sxyz[_el2V[iEl][j]] * f[j];
     }
-- 
GitLab