summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-04-09 22:19:55 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2021-04-09 22:19:55 +0300
commit52a8e6292cfbfd1d9b006eeeff74e5c4a6a687a8 (patch)
tree36bc9a77305e7de27a6d4fb376289d7931bae2e3
parent5e134b4732e5224b1a5da929a4b12ac63ec120b4 (diff)
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
-rw-r--r--indra/newview/llvovolume.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 95cfe29a80..05e8bd4cae 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -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);