Commit: e981f0e4a029337a24a9b581a16ebd106c5845e4
Author: Kévin Dietrich
Date:   Wed Jun 22 17:05:00 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rBe981f0e4a029337a24a9b581a16ebd106c5845e4

Fix crash accessing arrays out of bounds.

===================================================================

M       source/blender/alembic/intern/abc_mesh.cc
M       source/blender/alembic/intern/alembic_capi.cc

===================================================================

diff --git a/source/blender/alembic/intern/abc_mesh.cc 
b/source/blender/alembic/intern/abc_mesh.cc
index b6b870b..1201493 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -979,16 +979,18 @@ void AbcMeshReader::readPolyDataSample(Mesh *mesh,
                uvs = uvsamp.getVals();
                uvs_indices = uvsamp.getIndices();
 
-               std::string name = 
Alembic::Abc::GetSourceName(uv.getMetaData());
+               if (uvs_indices->size() == mesh->totloop) {
+                       std::string name = 
Alembic::Abc::GetSourceName(uv.getMetaData());
+
+                       /* According to the convention, primary UVs should have 
had their name
+                        * set using Alembic::Abc::SetSourceName, but you can't 
expect everyone
+                        * to follow it! :) */
+                       if (name.empty()) {
+                               name = uv.getName();
+                       }
 
-               /* According to the convention, primary UVs should have had 
their name
-                * set using Alembic::Abc::SetSourceName, but you can't expect 
everyone
-                * to follow it! :) */
-               if (name.empty()) {
-                       name = uv.getName();
+                       ED_mesh_uv_texture_add(mesh, name.c_str(), true);
                }
-
-               ED_mesh_uv_texture_add(mesh, name.c_str(), true);
        }
 
        read_mpolys(mesh->mpoly, mesh->mloop, mesh->mloopuv, &mesh->ldata,
@@ -1109,7 +1111,7 @@ void read_mpolys(MPoly *mpolys, MLoop *mloops, MLoopUV 
*mloopuvs, CustomData *ld
        }
 
        const bool do_normals = (normals && pnors);
-       const bool do_uvs = (mloopuvs && uvs && uvs_indices);
+       const bool do_uvs = (mloopuvs && uvs && uvs_indices) && 
(uvs_indices->size() == face_indices->size());
        unsigned int loop_index = 0;
        unsigned int rev_loop_index = 0;
        unsigned int uv_index = 0;
diff --git a/source/blender/alembic/intern/alembic_capi.cc 
b/source/blender/alembic/intern/alembic_capi.cc
index 4638309..0067216 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -776,6 +776,11 @@ static DerivedMesh *read_mesh_sample(DerivedMesh *dm, 
const IObject &iobject, co
                uv.getIndexed(uvsamp, sample_sel);
                uvs = uvsamp.getVals();
                uvs_indices = uvsamp.getIndices();
+
+               if (uvs_indices->size() != dm->getNumLoops(dm)) {
+                       uvs = Alembic::Abc::V2fArraySamplePtr();
+                       uvs_indices = Alembic::Abc::UInt32ArraySamplePtr();
+               }
        }
 
        N3fArraySamplePtr vertex_normals, poly_normals;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to