aboutsummaryrefslogtreecommitdiff
path: root/system/lxterminal/fix_use-after-free.patch
diff options
context:
space:
mode:
Diffstat (limited to 'system/lxterminal/fix_use-after-free.patch')
-rw-r--r--system/lxterminal/fix_use-after-free.patch34
1 files changed, 34 insertions, 0 deletions
diff --git a/system/lxterminal/fix_use-after-free.patch b/system/lxterminal/fix_use-after-free.patch
new file mode 100644
index 0000000000..d9ac70f2ff
--- /dev/null
+++ b/system/lxterminal/fix_use-after-free.patch
@@ -0,0 +1,34 @@
+From 3fa3a935bdacbcedccf51bea4b8b3c0a396b10ee Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ingo=20Br=C3=BCckl?= <ib@oddnet.de>
+Date: Tue, 15 Apr 2025 17:48:10 +0200
+Subject: [PATCH] Prevent access to terminal data after it has been freed
+
+After the last terminal child (tab) exits, all terminal data is freed.
+Checking whether the number of terminal tabs is zero is a use-after-free
+access.
+
+This fixes github issue #131, reported by mtasaka.
+---
+ src/lxterminal.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/lxterminal.c b/src/lxterminal.c
+index 5148b75..18ac81a 100644
+--- a/src/lxterminal.c
++++ b/src/lxterminal.c
+@@ -478,12 +478,14 @@ static void terminal_close_tab_activate_event(GtkAction * action, LXTerminal * t
+ * Close the current window. */
+ static void terminal_close_window_activate_event(GtkAction * action, LXTerminal * terminal)
+ {
++ guint len;
++
+ if (!terminal_close_window_confirmation_dialog(terminal)) {
+ return;
+ }
+
+ /* Play it safe and delete tabs one by one. */
+- while(terminal->terms->len > 0) {
++ for (len = terminal->terms->len; len; len--) {
+ Term *term = g_ptr_array_index(terminal->terms, 0);
+ #if VTE_CHECK_VERSION (0, 38, 0)
+ terminal_child_exited_event(VTE_TERMINAL(term->vte), 0, term);