diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 34a12d1e2a..7752976ec0 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1681,6 +1681,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* { LLPointer cur_buffer = facep->getVertexBuffer(); const LLVolumeFace& cur_vol_face = volume->getVolumeFace(i); + // FIRE-14261 try to skip broken or out of bounds faces if( cur_vol_face.mNumVertices > 0x10000 || cur_vol_face.mNumVertices < 0 || cur_vol_face.mNumIndices < 0 ) { LL_WARNS() << "Skipping face " << i @@ -1689,6 +1690,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* << LL_ENDL; continue; } + // getRiggedGeometry(facep, cur_buffer, face_data_mask, skin, volume, cur_vol_face); } } @@ -1698,7 +1700,20 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* } else { //just rebuild this face - getRiggedGeometry(face, buffer, data_mask, skin, volume, vol_face); + // FIRE-14261 try to skip broken or out of bounds faces + //getRiggedGeometry(face, buffer, data_mask, skin, volume, vol_face); + if (vol_face.mNumVertices <= 0x10000 && vol_face.mNumVertices >= 0 && vol_face.mNumIndices >= 0) + { + getRiggedGeometry(face, buffer, data_mask, skin, volume, vol_face); + } + else + { + LL_WARNS() << "Skipping face - " + << " vertices " << vol_face.mNumVertices << " indices " << vol_face.mNumIndices + << " face is possibly corrupted" + << LL_ENDL; + } + // } }