diff --git a/source/blender/blenkernel/intern/pbvh.cc b/source/blender/blenkernel/intern/pbvh.cc index ba811067cbf..186ce741046 100644 --- a/source/blender/blenkernel/intern/pbvh.cc +++ b/source/blender/blenkernel/intern/pbvh.cc @@ -1010,6 +1010,19 @@ static void update_normals_faces(Tree &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( [&]() {