summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debian/changelog16
-rw-r--r--debian/control6
-rw-r--r--debian/patches/series2
-rw-r--r--debian/patches/upstream-PR-3860.diff140
-rw-r--r--debian/patches/upstream-bd29a48b56.diff24
-rwxr-xr-xdebian/rules6
6 files changed, 190 insertions, 4 deletions
diff --git a/debian/changelog b/debian/changelog
index 9cb8635..2279b7d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,19 @@
+tmux (3.4-2) unstable; urgency=medium
+
+ [ Sven Joachim ]
+ * Only enable systemd support on Linux architectures.
+
+ [ Romain Francoise ]
+ * Disable Sixel support for now due to possible server crash on invalid
+ input (GitHub issue #3839).
+ * Cherry-pick commit bd29a48b56 from upstream to fix split-window -p
+ flag confusion.
+ * Cherry-pick changes from upstream PR #3860 fixing a use-after-free
+ when manipulating zoomed windows.
+ * Drop obsolete build-depends (lintian warning).
+
+ -- Romain Francoise <rfrancoise@debian.org> Sat, 09 Mar 2024 12:16:21 +0100
+
tmux (3.4-1) unstable; urgency=low
* New upstream release (closes: #1063838).
diff --git a/debian/control b/debian/control
index dc046b3..279c980 100644
--- a/debian/control
+++ b/debian/control
@@ -7,11 +7,11 @@ Build-Depends: bison,
debianutils (>= 5.3-1~),
dpkg-dev (>= 1.16.1~),
libevent-dev (>> 2.0.10),
- libncurses-dev | libncurses5-dev,
- libsystemd-dev,
+ libncurses-dev,
+ libsystemd-dev [linux-any],
libutempter-dev,
libutil-freebsd-dev [kfreebsd-any],
- pkg-config
+ pkgconf
Standards-Version: 4.6.2
Rules-Requires-Root: no
Homepage: https://tmux.github.io/
diff --git a/debian/patches/series b/debian/patches/series
index ac55c0e..30716db 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,3 @@
platform-quirks.diff
+upstream-bd29a48b56.diff
+upstream-PR-3860.diff
diff --git a/debian/patches/upstream-PR-3860.diff b/debian/patches/upstream-PR-3860.diff
new file mode 100644
index 0000000..4711745
--- /dev/null
+++ b/debian/patches/upstream-PR-3860.diff
@@ -0,0 +1,140 @@
+From 5363a5475a1dd4158c1ddb23de2da34e88738673 Mon Sep 17 00:00:00 2001
+From: Romain Francoise <romain@rfr.io>
+Date: Sun, 25 Feb 2024 15:53:25 +0100
+Subject: [PATCH] Don't notify when unzooming windows from window_destroy()
+
+Since commit 36e1ac65560, window_destroy() calls window_unzoom()
+but the latter emits a 'window-layout-changed' notification with
+the window which is about to be freed. This results in the
+callback later dereferencing a freed window, or a double-free.
+
+Closes: #3857.
+---
+ cmd-display-panes.c | 2 +-
+ cmd-resize-pane.c | 2 +-
+ popup.c | 2 +-
+ resize.c | 2 +-
+ server-fn.c | 2 +-
+ tmux.h | 2 +-
+ window.c | 10 ++++++----
+ 7 files changed, 12 insertions(+), 10 deletions(-)
+
+diff --git a/cmd-display-panes.c b/cmd-display-panes.c
+index 06f6dc277a..25556f3d58 100644
+--- a/cmd-display-panes.c
++++ b/cmd-display-panes.c
+@@ -246,7 +246,7 @@ cmd_display_panes_key(struct client *c, void *data, struct key_event *event)
+ wp = window_pane_at_index(w, index);
+ if (wp == NULL)
+ return (1);
+- window_unzoom(w);
++ window_unzoom(w, 1);
+
+ xasprintf(&expanded, "%%%u", wp->id);
+
+diff --git a/cmd-resize-pane.c b/cmd-resize-pane.c
+index c9439441f6..b2c167f59f 100644
+--- a/cmd-resize-pane.c
++++ b/cmd-resize-pane.c
+@@ -87,7 +87,7 @@ cmd_resize_pane_exec(struct cmd *self, struct cmdq_item *item)
+
+ if (args_has(args, 'Z')) {
+ if (w->flags & WINDOW_ZOOMED)
+- window_unzoom(w);
++ window_unzoom(w, 1);
+ else
+ window_zoom(wp);
+ server_redraw_window(w);
+diff --git a/popup.c b/popup.c
+index 4742733932..01b95e27b8 100644
+--- a/popup.c
++++ b/popup.c
+@@ -345,7 +345,7 @@ popup_make_pane(struct popup_data *pd, enum layout_type type)
+ u_int hlimit;
+ const char *shell;
+
+- window_unzoom(w);
++ window_unzoom(w, 1);
+
+ lc = layout_split_pane(wp, type, -1, 0);
+ hlimit = options_get_number(s->options, "history-limit");
+diff --git a/resize.c b/resize.c
+index 457fee0a7b..dff9571270 100644
+--- a/resize.c
++++ b/resize.c
+@@ -40,7 +40,7 @@ resize_window(struct window *w, u_int sx, u_int sy, int xpixel, int ypixel)
+ /* If the window is zoomed, unzoom. */
+ zoomed = w->flags & WINDOW_ZOOMED;
+ if (zoomed)
+- window_unzoom(w);
++ window_unzoom(w, 1);
+
+ /* Resize the layout first. */
+ layout_resize(w, sx, sy);
+diff --git a/server-fn.c b/server-fn.c
+index 2f649329cb..00d0e37843 100644
+--- a/server-fn.c
++++ b/server-fn.c
+@@ -488,6 +488,6 @@ server_check_unattached(void)
+ void
+ server_unzoom_window(struct window *w)
+ {
+- if (window_unzoom(w) == 0)
++ if (window_unzoom(w, 1) == 0)
+ server_redraw_window(w);
+ }
+diff --git a/tmux.h b/tmux.h
+index a50adbfae0..7671cca097 100644
+--- a/tmux.h
++++ b/tmux.h
+@@ -3070,7 +3070,7 @@ struct window_pane *window_add_pane(struct window *, struct window_pane *,
+ void window_resize(struct window *, u_int, u_int, int, int);
+ void window_pane_send_resize(struct window_pane *, u_int, u_int);
+ int window_zoom(struct window_pane *);
+-int window_unzoom(struct window *);
++int window_unzoom(struct window *, int);
+ int window_push_zoom(struct window *, int, int);
+ int window_pop_zoom(struct window *);
+ void window_lost_pane(struct window *, struct window_pane *);
+diff --git a/window.c b/window.c
+index 77ce41d8f7..69a42ab7e6 100644
+--- a/window.c
++++ b/window.c
+@@ -338,7 +338,7 @@ window_destroy(struct window *w)
+ {
+ log_debug("window @%u destroyed (%d references)", w->id, w->references);
+
+- window_unzoom(w);
++ window_unzoom(w, 0);
+ RB_REMOVE(windows, &windows, w);
+
+ if (w->layout_root != NULL)
+@@ -673,7 +673,7 @@ window_zoom(struct window_pane *wp)
+ }
+
+ int
+-window_unzoom(struct window *w)
++window_unzoom(struct window *w, int notify)
+ {
+ struct window_pane *wp;
+
+@@ -690,7 +690,9 @@ window_unzoom(struct window *w)
+ wp->saved_layout_cell = NULL;
+ }
+ layout_fix_panes(w, NULL);
+- notify_window("window-layout-changed", w);
++
++ if (notify)
++ notify_window("window-layout-changed", w);
+
+ return (0);
+ }
+@@ -704,7 +706,7 @@ window_push_zoom(struct window *w, int always, int flag)
+ w->flags |= WINDOW_WASZOOMED;
+ else
+ w->flags &= ~WINDOW_WASZOOMED;
+- return (window_unzoom(w) == 0);
++ return (window_unzoom(w, 1) == 0);
+ }
+
+ int
diff --git a/debian/patches/upstream-bd29a48b56.diff b/debian/patches/upstream-bd29a48b56.diff
new file mode 100644
index 0000000..49f34be
--- /dev/null
+++ b/debian/patches/upstream-bd29a48b56.diff
@@ -0,0 +1,24 @@
+commit bd29a48b56ae649d425fd6939d60f75d79d767da
+Author: Nicholas Marriott <nicholas.marriott@gmail.com>
+Date: Wed Mar 6 21:32:39 2024 +0000
+
+ Check for the right flag to fix split-window -p, from Bryan Childs.
+
+diff --git a/cmd-split-window.c b/cmd-split-window.c
+index 18df715ef0..82ff22aff0 100644
+--- a/cmd-split-window.c
++++ b/cmd-split-window.c
+@@ -94,10 +94,10 @@ cmd_split_window_exec(struct cmd *self, struct cmdq_item *item)
+ size = -1;
+ if (args_has(args, 'l')) {
+ size = args_percentage_and_expand(args, 'l', 0, INT_MAX, curval,
+- item, &cause);
++ item, &cause);
+ } else if (args_has(args, 'p')) {
+- size = args_strtonum_and_expand(args, 'l', 0, 100, item,
+- &cause);
++ size = args_strtonum_and_expand(args, 'p', 0, 100, item,
++ &cause);
+ if (cause == NULL)
+ size = curval * size / 100;
+ }
diff --git a/debian/rules b/debian/rules
index 6c76020..6a14e40 100755
--- a/debian/rules
+++ b/debian/rules
@@ -2,11 +2,15 @@
export DEB_BUILD_MAINT_OPTIONS=hardening=+all
+ifeq ($(DEB_HOST_ARCH_OS),linux)
+enable_systemd = --enable-systemd
+endif
+
%:
dh $@
override_dh_auto_configure:
- dh_auto_configure -- --enable-utempter --enable-systemd --enable-sixel
+ dh_auto_configure -- --enable-utempter $(enable_systemd)
execute_after_dh_auto_install:
install -D -m 644 debian/shells \