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.
pull/675/head
Turo Lamminen 2015-10-28 14:10:18 +02:00
parent fba7ede639
commit 7a5bc6eca3
1 changed files with 5 additions and 3 deletions

View File

@ -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>");