From cf07fb26796e1c29e1c5037f13e0dfeaa146403e Mon Sep 17 00:00:00 2001
From: Gaetan Bricteux <gaetan.bricteux@uclouvain.be>
Date: Tue, 22 Nov 2011 13:54:56 +0000
Subject: [PATCH] strengthening of the index control

---
 Geo/GModelIO_Mesh.cpp | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/Geo/GModelIO_Mesh.cpp b/Geo/GModelIO_Mesh.cpp
index b99a189168..0fa196375c 100644
--- a/Geo/GModelIO_Mesh.cpp
+++ b/Geo/GModelIO_Mesh.cpp
@@ -86,10 +86,10 @@ static bool getVertices(int num, int *indices, std::map<int, MVertex*> &map,
 }
 
 static bool getVertices(int num, int *indices, std::vector<MVertex*> &vec,
-                        std::vector<MVertex*> &vertices)
+                        std::vector<MVertex*> &vertices, int minVertex = 0)
 {
   for(int i = 0; i < num; i++){
-    if(indices[i] < 0 || indices[i] > (int)(vec.size() - 1)){
+    if(indices[i] < minVertex || indices[i] > (int)(vec.size() - 1 + minVertex)){
       Msg::Error("Wrong vertex index %d", indices[i]);
       return false;
     }
@@ -241,6 +241,7 @@ int GModel::readMSH(const std::string &name)
   std::map<int, std::map<int, std::string> > physicals[4];
   std::map<int, MVertex*> vertexMap;
   std::vector<MVertex*> vertexVector;
+  int minVertex = 0;
 
   while(1) {
 
@@ -297,7 +298,8 @@ int GModel::readMSH(const std::string &name)
       Msg::ResetProgressMeter();
       vertexVector.clear();
       vertexMap.clear();
-      int minVertex = numVertices + 1, maxVertex = -1;
+      minVertex = numVertices + 1;
+      int maxVertex = -1;
       for(int i = 0; i < numVertices; i++) {
         int num;
         double xyz[3], uv[2];
@@ -441,7 +443,7 @@ int GModel::readMSH(const std::string &name)
             if(fscanf(fp, "%d", &indices[j]) != 1) return 0;
           std::vector<MVertex*> vertices;
           if(vertexVector.size()){
-            if(!getVertices(numVertices, indices, vertexVector, vertices)) return 0;
+            if(!getVertices(numVertices, indices, vertexVector, vertices, minVertex)) return 0;
           }
           else{
             if(!getVertices(numVertices, indices, vertexMap, vertices)) return 0;
@@ -504,7 +506,7 @@ int GModel::readMSH(const std::string &name)
             int *indices = &data[numTags + 1];
             std::vector<MVertex*> vertices;
             if(vertexVector.size()){
-              if(!getVertices(numVertices, indices, vertexVector, vertices)) return 0;
+              if(!getVertices(numVertices, indices, vertexVector, vertices, minVertex)) return 0;
             }
             else{
               if(!getVertices(numVertices, indices, vertexMap, vertices)) return 0;
-- 
GitLab