From 54f5d01190d0952c5d4fcae1f34d7e3bba0a14e5 Mon Sep 17 00:00:00 2001 From: Alex Date: Wed, 31 May 2023 11:37:15 +0000 Subject: [PATCH] Fix Heap-buffer-overflow WRITE in Assimp::ObjFileImporter::createVertexArray --- code/AssetLib/Obj/ObjFileImporter.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/code/AssetLib/Obj/ObjFileImporter.cpp b/code/AssetLib/Obj/ObjFileImporter.cpp index cf4515794..173ef2074 100644 --- a/code/AssetLib/Obj/ObjFileImporter.cpp +++ b/code/AssetLib/Obj/ObjFileImporter.cpp @@ -323,7 +323,7 @@ aiMesh *ObjFileImporter::createTopology(const ObjFile::Model *pModel, const ObjF return nullptr; } - aiMesh *pMesh = new aiMesh; + std::unique_ptr pMesh(new aiMesh); if (!pObjMesh->m_name.empty()) { pMesh->mName.Set(pObjMesh->m_name); } @@ -385,9 +385,9 @@ aiMesh *ObjFileImporter::createTopology(const ObjFile::Model *pModel, const ObjF } // Create mesh vertices - createVertexArray(pModel, pData, meshIndex, pMesh, uiIdxCount); + createVertexArray(pModel, pData, meshIndex, pMesh.get(), uiIdxCount); - return pMesh; + return pMesh.release(); } // ------------------------------------------------------------------------------------------------ @@ -498,6 +498,10 @@ void ObjFileImporter::createVertexArray(const ObjFile::Model *pModel, if (vertexIndex) { if (!last) { + if (pMesh->mNumVertices <= newIndex + 1) { + throw DeadlyImportError("OBJ: bad vertex index"); + } + pMesh->mVertices[newIndex + 1] = pMesh->mVertices[newIndex]; if (!sourceFace->m_normals.empty() && !pModel->mNormals.empty()) { pMesh->mNormals[newIndex + 1] = pMesh->mNormals[newIndex];