From 104a70f8453bcac885c835f5c747762ca75949eb Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 23 Jul 2024 16:32:11 +0200 Subject: [PATCH] Return false instead of crash (#5685) - Return false instead of crash - closes https://github.com/assimp/assimp/issues/5684 --- code/PostProcessing/TriangulateProcess.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/PostProcessing/TriangulateProcess.cpp b/code/PostProcessing/TriangulateProcess.cpp index ac483f215..c0ffffd6b 100644 --- a/code/PostProcessing/TriangulateProcess.cpp +++ b/code/PostProcessing/TriangulateProcess.cpp @@ -192,13 +192,13 @@ bool TriangulateProcess::TriangulateMesh( aiMesh* pMesh) { for( unsigned int a = 0; a < pMesh->mNumFaces; a++) { const aiFace& face = pMesh->mFaces[a]; - if( face.mNumIndices != 3) { bNeed = true; } } - if (!bNeed) + if (!bNeed) { return false; + } } else if (!(pMesh->mPrimitiveTypes & aiPrimitiveType_POLYGON)) { return false; @@ -213,8 +213,7 @@ bool TriangulateProcess::TriangulateMesh( aiMesh* pMesh) { get_normals = false; } if( face.mNumIndices <= 3) { - numOut++; - + ++numOut; } else { numOut += face.mNumIndices-2; max_out = std::max(max_out,face.mNumIndices); @@ -222,8 +221,11 @@ bool TriangulateProcess::TriangulateMesh( aiMesh* pMesh) { } // Just another check whether aiMesh::mPrimitiveTypes is correct - ai_assert(numOut != pMesh->mNumFaces); - + if (numOut == pMesh->mNumFaces) { + ASSIMP_LOG_ERROR( "Invalidation detected in the number of indices: does not fit to the primitive type." ); + return false; + } + aiVector3D *nor_out = nullptr; // if we don't have normals yet, but expect them to be a cheap side