From 3d8384b6963e0c0c83991b4d9045095e554d890a Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Mon, 12 Oct 2015 00:49:07 +0100 Subject: [PATCH] detect a fully degenerated mesh and avoid using it and so crashing ubOde --- OpenSim/Region/PhysicsModules/ubOdeMeshing/Mesh.cs | 10 ++++++++++ .../Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs | 9 ++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Mesh.cs b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Mesh.cs index da8f6236c4..b860255155 100644 --- a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Mesh.cs +++ b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Mesh.cs @@ -278,6 +278,16 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing return new Vector3(x, y, z); } + public int numberVertices() + { + return m_bdata.m_vertices.Count; + } + + public int numberTriangles() + { + return m_bdata.m_triangles.Count; + } + public List getVertexList() { List result = new List(); diff --git a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs index 84df369cf2..596ce0fa16 100644 --- a/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs +++ b/OpenSim/Region/PhysicsModules/ubOdeMeshing/Meshmerizer.cs @@ -337,7 +337,6 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing return null; } - primShape.SculptData = Utils.EmptyBytes; int numCoords = coords.Count; int numFaces = faces.Count; @@ -355,6 +354,14 @@ namespace OpenSim.Region.PhysicsModule.ubODEMeshing coords.Clear(); faces.Clear(); + if(mesh.numberVertices() < 3 || mesh.numberTriangles() < 1) + { + m_log.ErrorFormat("[MESH]: invalid degenerated mesh for prim " + primName + " ignored"); + return null; + } + + primShape.SculptData = Utils.EmptyBytes; + return mesh; }