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