[Bf-blender-cvs] [21c039f6ef3] master: Alembic: fix heap-use-after-free error
Sybren A. Stüvel
noreply at git.blender.org
Thu Aug 1 15:15:12 CEST 2019
Commit: 21c039f6ef3fb10c0439b096ed7e89d59e3997b3
Author: Sybren A. Stüvel
Date: Thu Aug 1 15:14:57 2019 +0200
Branches: master
https://developer.blender.org/rB21c039f6ef3fb10c0439b096ed7e89d59e3997b3
Alembic: fix heap-use-after-free error
The mesh can be freed by BKE_mesh_nomain_to_mesh(), so we need to get
the `ME_AUTOSMOOTH` flag before that call, and not after.
===================================================================
M source/blender/alembic/intern/abc_mesh.cc
===================================================================
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index 9e6f2dd6b52..6647ca83bd6 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -1093,10 +1093,11 @@ void AbcMeshReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec
Mesh *read_mesh = this->read_mesh(mesh, sample_sel, MOD_MESHSEQ_READ_ALL, NULL);
if (read_mesh != mesh) {
- BKE_mesh_nomain_to_mesh(read_mesh, mesh, m_object, &CD_MASK_MESH, true);
-
/* XXX fixme after 2.80; mesh->flag isn't copied by BKE_mesh_nomain_to_mesh() */
- mesh->flag |= (read_mesh->flag & ME_AUTOSMOOTH);
+ /* read_mesh can be freed by BKE_mesh_nomain_to_mesh(), so get the flag before that happens. */
+ short autosmooth = (read_mesh->flag & ME_AUTOSMOOTH);
+ BKE_mesh_nomain_to_mesh(read_mesh, mesh, m_object, &CD_MASK_MESH, true);
+ mesh->flag |= autosmooth;
}
if (m_settings->validate_meshes) {
More information about the Bf-blender-cvs
mailing list