summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2022-11-29 10:26:57 +0100
committerRémi Verschelde <rverschelde@gmail.com>2022-11-29 10:26:57 +0100
commita3e39d7e7c9cabdba6716934260d659c96e3fdc6 (patch)
treed8e53aa4a9fd14d2fb2cd203b2d5eb0a41f4d9d0
parentb7667e6a479ceb870c3f3b9a9a65b2f602acb9f8 (diff)
parent4a50f44cd22448474aedc35d96533e8709ba26f7 (diff)
Merge pull request #69323 from timothyqiu/erase-in-loop
Fix heap-use-after-free when removing a tile in TileSet editor
-rw-r--r--editor/plugins/tiles/tile_set_atlas_source_editor.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
index 8e69abd7ff..11007e6851 100644
--- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
+++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp
@@ -543,11 +543,13 @@ void TileSetAtlasSourceEditor::_update_source_inspector() {
void TileSetAtlasSourceEditor::_update_fix_selected_and_hovered_tiles() {
// Fix selected.
- for (RBSet<TileSelection>::Element *E = selection.front(); E; E = E->next()) {
+ for (RBSet<TileSelection>::Element *E = selection.front(); E;) {
+ RBSet<TileSelection>::Element *N = E->next();
TileSelection selected = E->get();
if (!tile_set_atlas_source->has_tile(selected.tile) || !tile_set_atlas_source->has_alternative_tile(selected.tile, selected.alternative)) {
selection.erase(E);
}
+ E = N;
}
// Fix hovered.