SL-15100 Crash rebulding faces

According to bugsplat's "Locals", viewer tried to iterate through 536018048 faces
LLVolume pointer seemed to be valid but data in LLVolume wasn't, so likely vobj was invalid
meow-7.2.2
Andrey Kleshchev 2021-04-09 22:19:55 +03:00
parent 5e134b4732
commit 52a8e6292c
1 changed files with 14 additions and 4 deletions

View File

@ -6048,14 +6048,25 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
LLVOVolume* vobj = drawablep->getVOVolume();
if (debugLoggingEnabled("AnimatedObjectsLinkset"))
{
if (vobj->isAnimatedObject() && vobj->isRiggedMesh())
if (vobj && vobj->isAnimatedObject() && vobj->isRiggedMesh())
{
std::string vobj_name = llformat("Vol%p", vobj);
F32 est_tris = vobj->getEstTrianglesMax();
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuildMesh, tris " << est_tris << LL_ENDL;
LL_DEBUGS("AnimatedObjectsLinkset") << vobj_name << " rebuildMesh, tris " << est_tris << LL_ENDL;
}
}
if (vobj->isNoLOD()) continue;
if (!vobj || vobj->isNoLOD())
{
continue;
}
LLVolume* volume = vobj->getVolume();
if (!volume)
{
continue;
}
vobj->preRebuild();
@ -6064,7 +6075,6 @@ void LLVolumeGeometryManager::rebuildMesh(LLSpatialGroup* group)
vobj->updateRelativeXform(true);
}
LLVolume* volume = vobj->getVolume();
for (S32 i = 0; i < drawablep->getNumFaces(); ++i)
{
LLFace* face = drawablep->getFace(i);