mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
view: assert internal signals are disconnected before destroy
If they are not empty, then we are headed for use-after-free shortly.
An assert() failure is easier to debug than UAF, so let's fail early.
Inspired by:
8f56f7ca43
This commit is contained in:
parent
bc34461977
commit
2547f96984
1 changed files with 10 additions and 0 deletions
10
src/view.c
10
src/view.c
|
|
@ -2684,6 +2684,16 @@ view_destroy(struct view *view)
|
|||
view->scene_tree = NULL;
|
||||
}
|
||||
|
||||
assert(wl_list_empty(&view->events.new_app_id.listener_list));
|
||||
assert(wl_list_empty(&view->events.new_title.listener_list));
|
||||
assert(wl_list_empty(&view->events.new_outputs.listener_list));
|
||||
assert(wl_list_empty(&view->events.maximized.listener_list));
|
||||
assert(wl_list_empty(&view->events.minimized.listener_list));
|
||||
assert(wl_list_empty(&view->events.fullscreened.listener_list));
|
||||
assert(wl_list_empty(&view->events.activated.listener_list));
|
||||
assert(wl_list_empty(&view->events.set_icon.listener_list));
|
||||
assert(wl_list_empty(&view->events.destroy.listener_list));
|
||||
|
||||
/* Remove view from server->views */
|
||||
wl_list_remove(&view->link);
|
||||
free(view);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue