From 80a813ff1c315fa9a419c4f5971707bdff43d3f4 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 6 Sep 2023 17:37:11 +0200 Subject: [PATCH] Fix use-after-free when undoing marker creation Create a marker by ctrl-click, hover over it and then ctrl+z undo. This used to crash in Editor::get_preferred_edit_position() gtk2_ardour/editor.cc:5179, checking for entered_marker->position() --- gtk2_ardour/editor_markers.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gtk2_ardour/editor_markers.cc b/gtk2_ardour/editor_markers.cc index 89e9794c12..bb9ed38a17 100644 --- a/gtk2_ardour/editor_markers.cc +++ b/gtk2_ardour/editor_markers.cc @@ -69,6 +69,8 @@ Editor::clear_marker_display () delete i->second; } + entered_marker = 0; + location_markers.clear (); _sorted_marker_lists.clear (); } @@ -619,6 +621,11 @@ Editor::refresh_location_display_internal (const Locations::LocationList& locati LocationMarkers* m = i->second; location_markers.erase (i); + + if (m && (entered_marker == m->start || entered_marker == m->end)) { + entered_marker = 0; + } + delete m; } @@ -896,6 +903,10 @@ Editor::remove_marker (ArdourMarker* marker) return; } + if (entered_marker == marker) { + entered_marker = 0; + } + if (marker->type() == ArdourMarker::RegionCue) { Glib::signal_idle().connect (sigc::bind (sigc::mem_fun(*this, &Editor::really_remove_region_marker), marker)); } else { @@ -970,6 +981,11 @@ Editor::location_gone (Location *location) LocationMarkers* m = i->second; location_markers.erase (i); + + if (m && (entered_marker == m->start || entered_marker == m->end)) { + entered_marker = 0; + } + delete m; /* Markers that visually overlap with this (removed) marker