diff --git a/source/blender/blenkernel/intern/pbvh.cc b/source/blender/blenkernel/intern/pbvh.cc index 07d4bf37923..f690868be0e 100644 --- a/source/blender/blenkernel/intern/pbvh.cc +++ b/source/blender/blenkernel/intern/pbvh.cc @@ -1177,6 +1177,19 @@ static void update_normals_faces(PBVH &pbvh, Span nodes, Mesh &mesh) } } + /* In certain cases when undoing strokes on a duplicate object, the cached data may be marked + * dirty before this code is run, leaving the relevant vectors empty. We force reinitialize the + * vectors to prevent crashes here. + * See #125375 for more detail. */ + if (!pbvh.deformed) { + if (mesh.runtime->face_normals_cache.is_dirty()) { + mesh.face_normals(); + } + if (mesh.runtime->vert_normals_cache.is_dirty()) { + mesh.vert_normals(); + } + } + VectorSet boundary_verts; threading::parallel_invoke( [&]() {