COBJMeshFileLoader: properly check indices

This commit is contained in:
sfan5 2023-09-18 22:08:55 +02:00
parent 80e160935d
commit 827710f74a

@ -220,7 +220,7 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file)
u32 wlength = copyWord(vertexWord, linePtr, WORD_BUFFER_LENGTH, endPtr); u32 wlength = copyWord(vertexWord, linePtr, WORD_BUFFER_LENGTH, endPtr);
// this function will also convert obj's 1-based index to c++'s 0-based index // this function will also convert obj's 1-based index to c++'s 0-based index
retrieveVertexIndices(vertexWord, Idx, vertexWord+wlength+1, vertexBuffer.size(), textureCoordBuffer.size(), normalsBuffer.size()); retrieveVertexIndices(vertexWord, Idx, vertexWord+wlength+1, vertexBuffer.size(), textureCoordBuffer.size(), normalsBuffer.size());
if ( -1 != Idx[0] && Idx[0] < (irr::s32)vertexBuffer.size() ) if ( Idx[0] >= 0 && Idx[0] < (irr::s32)vertexBuffer.size() )
v.Pos = vertexBuffer[Idx[0]]; v.Pos = vertexBuffer[Idx[0]];
else else
{ {
@ -229,11 +229,11 @@ IAnimatedMesh* COBJMeshFileLoader::createMesh(io::IReadFile* file)
cleanUp(); cleanUp();
return 0; return 0;
} }
if ( -1 != Idx[1] && Idx[1] < (irr::s32)textureCoordBuffer.size() ) if ( Idx[1] >= 0 && Idx[1] < (irr::s32)textureCoordBuffer.size() )
v.TCoords = textureCoordBuffer[Idx[1]]; v.TCoords = textureCoordBuffer[Idx[1]];
else else
v.TCoords.set(0.0f,0.0f); v.TCoords.set(0.0f,0.0f);
if ( -1 != Idx[2] && Idx[2] < (irr::s32)normalsBuffer.size() ) if ( Idx[2] >= 0 && Idx[2] < (irr::s32)normalsBuffer.size() )
v.Normal = normalsBuffer[Idx[2]]; v.Normal = normalsBuffer[Idx[2]];
else else
{ {