From 4a50f44cd22448474aedc35d96533e8709ba26f7 Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Tue, 29 Nov 2022 09:22:35 +0800 Subject: [PATCH] Fix heap-use-after-free when removing a tile in TileSet editor --- editor/plugins/tiles/tile_set_atlas_source_editor.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp index 8e69abd7ff1..11007e6851c 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::Element *E = selection.front(); E; E = E->next()) { + for (RBSet::Element *E = selection.front(); E;) { + RBSet::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.