1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-19 14:31:59 +00:00

Merge pull request #70732 from timothyqiu/tilemap-crash

Fix heap-use-after-free when using TileMap editor
This commit is contained in:
Rémi Verschelde
2023-01-03 12:24:10 +01:00

View File

@@ -1488,13 +1488,15 @@ void TileMapEditorTilesPlugin::_update_fix_selected_and_hovered() {
} }
// Selection if needed. // Selection if needed.
for (RBSet<TileMapCell>::Element *E = tile_set_selection.front(); E; E = E->next()) { for (RBSet<TileMapCell>::Element *E = tile_set_selection.front(); E;) {
RBSet<TileMapCell>::Element *N = E->next();
const TileMapCell *selected = &(E->get()); const TileMapCell *selected = &(E->get());
if (!tile_set->has_source(selected->source_id) || if (!tile_set->has_source(selected->source_id) ||
!tile_set->get_source(selected->source_id)->has_tile(selected->get_atlas_coords()) || !tile_set->get_source(selected->source_id)->has_tile(selected->get_atlas_coords()) ||
!tile_set->get_source(selected->source_id)->has_alternative_tile(selected->get_atlas_coords(), selected->alternative_tile)) { !tile_set->get_source(selected->source_id)->has_alternative_tile(selected->get_atlas_coords(), selected->alternative_tile)) {
tile_set_selection.erase(E); tile_set_selection.erase(E);
} }
E = N;
} }
if (!tile_map_selection.is_empty()) { if (!tile_map_selection.is_empty()) {