From Sukender, "I added a crash-guard against corrupted 3DS files, having faces indexes out of the range of existing vertices."

This commit is contained in:
Robert Osfield
2011-09-13 09:43:45 +00:00
parent 6d1ba5b06d
commit abb7228d56

View File

@@ -848,9 +848,12 @@ osg::Drawable* ReaderWriter3DS::ReaderObject::createDrawable(Lib3dsMesh *m,FaceL
fitr!=faceList.end();
++fitr)
{
Lib3dsFace& face = m->faces[*fitr];
if (face.index[0]>=orig2NewMapping.size() ||
face.index[1]>=orig2NewMapping.size() ||
face.index[2]>=orig2NewMapping.size()) continue; // Avoids crash with corrupted files
if (orig2NewMapping[face.index[0]]<0)
orig2NewMapping[face.index[0]] = noVertex++;
@@ -931,6 +934,11 @@ osg::Drawable* ReaderWriter3DS::ReaderObject::createDrawable(Lib3dsMesh *m,FaceL
++fitr)
{
Lib3dsFace& face = m->faces[*fitr];
if (face.index[0]>=orig2NewMapping.size() ||
face.index[1]>=orig2NewMapping.size() ||
face.index[2]>=orig2NewMapping.size()) continue; // Avoids crash with corrupted files
osg::Vec3f osgNormal( copyLib3dsVec3ToOsgVec3(normals[*fitr]) );
if (matrix) osgNormal = osg::Matrix::transform3x3(osgNormal, *matrix);
osgNormal.normalize();
@@ -976,6 +984,11 @@ osg::Drawable* ReaderWriter3DS::ReaderObject::createDrawable(Lib3dsMesh *m,FaceL
++fitr)
{
Lib3dsFace& face = m->faces[*fitr];
if (face.index[0]>=orig2NewMapping.size() ||
face.index[1]>=orig2NewMapping.size() ||
face.index[2]>=orig2NewMapping.size()) continue; // Avoids crash with corrupted files
*(index_itr++) = orig2NewMapping[face.index[0]];
*(index_itr++) = orig2NewMapping[face.index[1]];
*(index_itr++) = orig2NewMapping[face.index[2]];