Fix a use-after-free

In an `unordered_map`, any insertion can invalidate iterators,
when the load factor triggers a rehashing.
This commit is contained in:
Laurent Rineau 2022-06-08 15:52:01 +02:00
parent 54a992ff9f
commit f438a2ed3a
1 changed files with 3 additions and 3 deletions

View File

@ -5170,6 +5170,7 @@ remove_3D(Vertex_handle v, VertexRemover& remover)
} }
typename Vertex_triple_Facet_map::value_type o_vt_f_pair = *oit; typename Vertex_triple_Facet_map::value_type o_vt_f_pair = *oit;
outer_map.erase(oit);
Cell_handle o_ch = o_vt_f_pair.second.first; Cell_handle o_ch = o_vt_f_pair.second.first;
unsigned int o_i = o_vt_f_pair.second.second; unsigned int o_i = o_vt_f_pair.second.second;
@ -5215,7 +5216,6 @@ remove_3D(Vertex_handle v, VertexRemover& remover)
} }
} }
} }
outer_map.erase(oit);
} }
tds().delete_vertex(v); tds().delete_vertex(v);
tds().delete_cells(hole.begin(), hole.end()); tds().delete_cells(hole.begin(), hole.end());
@ -6059,6 +6059,7 @@ move_if_no_collision(Vertex_handle v, const Point& p,
} }
typename Vertex_triple_Facet_map::value_type o_vt_f_pair = *oit; typename Vertex_triple_Facet_map::value_type o_vt_f_pair = *oit;
outer_map.erase(oit);
Cell_handle o_ch = o_vt_f_pair.second.first; Cell_handle o_ch = o_vt_f_pair.second.first;
unsigned int o_i = o_vt_f_pair.second.second; unsigned int o_i = o_vt_f_pair.second.second;
@ -6105,7 +6106,6 @@ move_if_no_collision(Vertex_handle v, const Point& p,
} }
} }
} }
outer_map.erase(oit);
} }
// fixing pointer // fixing pointer
@ -6511,6 +6511,7 @@ move_if_no_collision_and_give_new_cells(Vertex_handle v, const Point& p,
} }
typename Vertex_triple_Facet_map::value_type o_vt_f_pair = *oit; typename Vertex_triple_Facet_map::value_type o_vt_f_pair = *oit;
outer_map.erase(oit);
Cell_handle o_ch = o_vt_f_pair.second.first; Cell_handle o_ch = o_vt_f_pair.second.first;
unsigned int o_i = o_vt_f_pair.second.second; unsigned int o_i = o_vt_f_pair.second.second;
@ -6558,7 +6559,6 @@ move_if_no_collision_and_give_new_cells(Vertex_handle v, const Point& p,
} }
} }
} }
outer_map.erase(oit);
} }
// fixing pointer // fixing pointer