diff options
author | msglm <msglm@techchud.xyz> | 2025-03-26 20:32:04 -0500 |
---|---|---|
committer | msglm <msglm@techchud.xyz> | 2025-03-26 20:32:04 -0500 |
commit | f1d7125d0b18cea1110502b12dcaba9efc47e700 (patch) | |
tree | ef3ecf5f02238978932525f612d0812b8ea36aa1 /aux-files/openbox/openbox-add-fix-for-glib2-exposed-segfault.patch | |
parent | 948f95ce5bb64a2f0f7012c57e1b06947e245d68 (diff) | |
download | guix-msglm-f1d7125d0b18cea1110502b12dcaba9efc47e700.tar.gz guix-msglm-f1d7125d0b18cea1110502b12dcaba9efc47e700.tar.bz2 guix-msglm-f1d7125d0b18cea1110502b12dcaba9efc47e700.zip |
added backports from personal guix contributions
Diffstat (limited to 'aux-files/openbox/openbox-add-fix-for-glib2-exposed-segfault.patch')
-rw-r--r-- | aux-files/openbox/openbox-add-fix-for-glib2-exposed-segfault.patch | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/aux-files/openbox/openbox-add-fix-for-glib2-exposed-segfault.patch b/aux-files/openbox/openbox-add-fix-for-glib2-exposed-segfault.patch new file mode 100644 index 0000000..ef68d31 --- /dev/null +++ b/aux-files/openbox/openbox-add-fix-for-glib2-exposed-segfault.patch @@ -0,0 +1,50 @@ +From 9ed6fdd71890c5cc43747f105382d5677e5d37e7 Mon Sep 17 00:00:00 2001 +From: pldubouilh <pldubouilh@gmail.com> +Date: Fri, 17 Mar 2023 18:23:47 +0100 +Subject: [PATCH] Fix list traversal issue in client_calc_layer + +The calls to client_calc_layer_internal can modify stacking_list, which +can cause us to follow dangling ->next pointers (either by the pointer +itself already being freed, or it pointing to a freed area). Avoid this +by copying the list first, the goal is to visit every client in the list +once so this should be fine. +--- + openbox/client.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/openbox/client.c b/openbox/client.c +index 7168b2407..b8264587c 100644 +--- a/openbox/client.c ++++ b/openbox/client.c +@@ -2742,9 +2742,12 @@ static void client_calc_layer_internal(ObClient *self) + void client_calc_layer(ObClient *self) + { + GList *it; ++ /* the client_calc_layer_internal calls below modify stacking_list, ++ so we have to make a copy to iterate over */ ++ GList *list = g_list_copy(stacking_list); + + /* skip over stuff above fullscreen layer */ +- for (it = stacking_list; it; it = g_list_next(it)) ++ for (it = list; it; it = g_list_next(it)) + if (window_layer(it->data) <= OB_STACKING_LAYER_FULLSCREEN) break; + + /* find the windows in the fullscreen layer, and mark them not-visited */ +@@ -2757,7 +2760,7 @@ void client_calc_layer(ObClient *self) + client_calc_layer_internal(self); + + /* skip over stuff above fullscreen layer */ +- for (it = stacking_list; it; it = g_list_next(it)) ++ for (it = list; it; it = g_list_next(it)) + if (window_layer(it->data) <= OB_STACKING_LAYER_FULLSCREEN) break; + + /* now recalc any windows in the fullscreen layer which have not +@@ -2768,6 +2771,8 @@ void client_calc_layer(ObClient *self) + !WINDOW_AS_CLIENT(it->data)->visited) + client_calc_layer_internal(it->data); + } ++ ++ g_list_free(it); + } + + gboolean client_should_show(ObClient *self) |