Explorar el Código

OFFLoader: Use a temporary vector to store vertices instead of a raw array

Prevents crash on certain malformed inputs but
they still cause a validation failure.
Turo Lamminen hace 10 años
padre
commit
7a5bc6eca3
Se han modificado 1 ficheros con 5 adiciones y 3 borrados
  1. 5 3
      code/OFFLoader.cpp

+ 5 - 3
code/OFFLoader.cpp

@@ -192,8 +192,8 @@ void OFFImporter::InternReadFile( const std::string& pFile,
         throw DeadlyImportError("OFF: There are no valid faces");
 
     // allocate storage for the output vertices
-    aiVector3D* verts = new aiVector3D[mesh->mNumVertices];
-    mesh->mVertices = verts;
+    std::vector<aiVector3D> verts;
+    verts.reserve(mesh->mNumVertices);
 
     // second: now parse all face indices
     buffer = old;
@@ -219,12 +219,14 @@ void OFFImporter::InternReadFile( const std::string& pFile,
                 idx = numVertices-1;
             }
             faces->mIndices[m] = p++;
-            *verts++ = tempPositions[idx];
+            verts.push_back(tempPositions[idx]);
         }
         ++i;
         ++faces;
     }
 
+    mesh->mVertices = new aiVector3D[verts.size()];
+    memcpy(mesh->mVertices, &verts[0], verts.size() * sizeof(aiVector3D));
     // generate the output node graph
     pScene->mRootNode = new aiNode();
     pScene->mRootNode->mName.Set("<OFFRoot>");