Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package tmux for openSUSE:Factory checked in at 2025-12-11 18:31:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/tmux (Old) and /work/SRC/openSUSE:Factory/.tmux.new.1939 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "tmux" Thu Dec 11 18:31:57 2025 rev:63 rq:1321900 version:3.6a Changes: -------- --- /work/SRC/openSUSE:Factory/tmux/tmux.changes 2025-12-02 13:19:41.913700296 +0100 +++ /work/SRC/openSUSE:Factory/.tmux.new.1939/tmux.changes 2025-12-11 18:32:13.366501525 +0100 @@ -1,0 +2,12 @@ +Fri Dec 5 16:06:23 UTC 2025 - Fredrik Lönnegren <[email protected]> + +- tmux 3.6a: + * A crash when linked against a libevent built with NDEBUG. + * A build issue with utempter on FreeBSD. + * Allow the mouse to enter copy mode when in the alternate screen again. + * Fixes to scrollbars, particularly when used with a pane status line. + * Correct handling of Unicode emoijs where the modifier precedes the modified + character. + * A crash and hang with malformed format strings. + +------------------------------------------------------------------- Old: ---- tmux-3.6.tar.gz New: ---- tmux-3.6a.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ tmux.spec ++++++ --- /var/tmp/diff_new_pack.Idhdhi/_old 2025-12-11 18:32:14.070531119 +0100 +++ /var/tmp/diff_new_pack.Idhdhi/_new 2025-12-11 18:32:14.070531119 +0100 @@ -18,7 +18,7 @@ Name: tmux -Version: 3.6 +Version: 3.6a Release: 0 Summary: Terminal multiplexer License: ISC AND BSD-3-Clause AND BSD-2-Clause ++++++ tmux-3.6.tar.gz -> tmux-3.6a.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/CHANGES new/tmux-3.6a/CHANGES --- old/tmux-3.6/CHANGES 2025-11-26 09:34:17.000000000 +0100 +++ new/tmux-3.6a/CHANGES 2025-12-05 06:39:41.000000000 +0100 @@ -1,3 +1,29 @@ +CHANGES FROM 3.6 TO 3.6a + +* Fix a buffer overread and an infinite loop in format processing (reported by + Giorgi Kobakhia, issue 4735). + +* Allow drag in alternate screen again (issue 4743 reported by Brad King). + +* Fix y offset of mouse if status at top (issue 4738 from Michael Grant). + +* Add a missing skin tone (from Jake Stewart, issue 4736). + +* Allow characters to be combined in either order (issue 4726, reported by Jake + Stewart). + +* Fix horizontal mouse resizing when pane status lines are on (from Michael + Grant, issue 4720). + +* Fix noattr so it does not delete attributes set in the style itself (issue + 4713). + +* Newer libevents do not allow event_del on a zero'd event (issue 4706). + +* Place cursor on correct line if message-line is not 0 (issue 4707). + +* Fix compile error on FreeBSD (from Yasuhiro Kimura, issue 4701). + CHANGES FROM 3.5a TO 3.6 * Add seconds options for clock mode (issue 4697). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/attributes.c new/tmux-3.6a/attributes.c --- old/tmux-3.6/attributes.c 2023-05-22 10:53:49.000000000 +0200 +++ new/tmux-3.6a/attributes.c 2025-12-02 15:25:05.000000000 +0100 @@ -31,7 +31,7 @@ if (attr == 0) return ("none"); - len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + len = xsnprintf(buf, sizeof buf, "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", (attr & GRID_ATTR_CHARSET) ? "acs," : "", (attr & GRID_ATTR_BRIGHT) ? "bright," : "", (attr & GRID_ATTR_DIM) ? "dim," : "", @@ -45,7 +45,8 @@ (attr & GRID_ATTR_UNDERSCORE_3) ? "curly-underscore," : "", (attr & GRID_ATTR_UNDERSCORE_4) ? "dotted-underscore," : "", (attr & GRID_ATTR_UNDERSCORE_5) ? "dashed-underscore," : "", - (attr & GRID_ATTR_OVERLINE) ? "overline," : ""); + (attr & GRID_ATTR_OVERLINE) ? "overline," : "", + (attr & GRID_ATTR_NOATTR) ? "noattr," : ""); if (len > 0) buf[len - 1] = '\0'; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/configure new/tmux-3.6a/configure --- old/tmux-3.6/configure 2025-11-26 09:36:23.000000000 +0100 +++ new/tmux-3.6a/configure 2025-12-05 06:48:18.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for tmux 3.6. +# Generated by GNU Autoconf 2.69 for tmux 3.6a. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -577,8 +577,8 @@ # Identity of this package. PACKAGE_NAME='tmux' PACKAGE_TARNAME='tmux' -PACKAGE_VERSION='3.6' -PACKAGE_STRING='tmux 3.6' +PACKAGE_VERSION='3.6a' +PACKAGE_STRING='tmux 3.6a' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1386,7 +1386,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures tmux 3.6 to adapt to many kinds of systems. +\`configure' configures tmux 3.6a to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1457,7 +1457,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of tmux 3.6:";; + short | recursive ) echo "Configuration of tmux 3.6a:";; esac cat <<\_ACEOF @@ -1615,7 +1615,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -tmux configure 3.6 +tmux configure 3.6a generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2026,7 +2026,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by tmux $as_me 3.6, which was +It was created by tmux $as_me 3.6a, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2892,7 +2892,7 @@ # Define the identity of the package. PACKAGE='tmux' - VERSION='3.6' + VERSION='3.6a' cat >>confdefs.h <<_ACEOF @@ -8949,7 +8949,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by tmux $as_me 3.6, which was +This file was extended by tmux $as_me 3.6a, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9006,7 +9006,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -tmux config.status 3.6 +tmux config.status 3.6a configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/configure.ac new/tmux-3.6a/configure.ac --- old/tmux-3.6/configure.ac 2025-11-26 09:33:29.000000000 +0100 +++ new/tmux-3.6a/configure.ac 2025-12-05 06:37:44.000000000 +0100 @@ -1,6 +1,6 @@ # configure.ac -AC_INIT([tmux], 3.6) +AC_INIT([tmux], 3.6a) AC_PREREQ([2.60]) AC_CONFIG_AUX_DIR(etc) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/format-draw.c new/tmux-3.6a/format-draw.c --- old/tmux-3.6/format-draw.c 2025-06-24 15:58:57.000000000 +0200 +++ new/tmux-3.6a/format-draw.c 2025-12-05 06:38:05.000000000 +0100 @@ -1104,8 +1104,6 @@ more = utf8_append(&ud, *cp); if (more == UTF8_DONE) width += ud.width; - else - cp -= ud.have; } else if (*cp > 0x1f && *cp < 0x7f) { width++; cp++; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/format.c new/tmux-3.6a/format.c --- old/tmux-3.6/format.c 2025-10-28 11:30:20.000000000 +0100 +++ new/tmux-3.6a/format.c 2025-12-05 06:38:05.000000000 +0100 @@ -5545,7 +5545,8 @@ buf[off++] = *fmt++; continue; } - fmt++; + if (*fmt++ == '\0') + break; ch = (u_char)*fmt++; switch (ch) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/key-bindings.c new/tmux-3.6a/key-bindings.c --- old/tmux-3.6/key-bindings.c 2025-11-07 13:35:54.000000000 +0100 +++ new/tmux-3.6a/key-bindings.c 2025-12-05 06:37:57.000000000 +0100 @@ -441,7 +441,7 @@ "bind -n MouseDown1Pane { select-pane -t=; send -M }", /* Mouse button 1 drag on pane. */ - "bind -n MouseDrag1Pane { if -F '#{||:#{alternate_on},#{pane_in_mode},#{mouse_any_flag}}' { send -M } { copy-mode -M } }", + "bind -n MouseDrag1Pane { if -F '#{||:#{pane_in_mode},#{mouse_any_flag}}' { send -M } { copy-mode -M } }", /* Mouse wheel up on pane. */ "bind -n WheelUpPane { if -F '#{||:#{alternate_on},#{pane_in_mode},#{mouse_any_flag}}' { send -M } { copy-mode -e } }", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/screen-redraw.c new/tmux-3.6a/screen-redraw.c --- old/tmux-3.6/screen-redraw.c 2025-08-22 10:47:18.000000000 +0200 +++ new/tmux-3.6a/screen-redraw.c 2025-12-05 06:37:48.000000000 +0100 @@ -1028,6 +1028,11 @@ int sx = ctx->sx, sy = ctx->sy, xoff = wp->xoff; int yoff = wp->yoff; + if (ctx->statustop) { + sb_y += ctx->statuslines; + sy += ctx->statuslines; + } + /* Set up style for slider. */ gc = sb_style->gc; memcpy(&slgc, &gc, sizeof slgc); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/screen-write.c new/tmux-3.6a/screen-write.c --- old/tmux-3.6/screen-write.c 2025-11-19 22:24:43.000000000 +0100 +++ new/tmux-3.6a/screen-write.c 2025-12-04 21:52:55.000000000 +0100 @@ -2152,6 +2152,8 @@ case HANGULJAMO_STATE_NOT_HANGULJAMO: if (utf8_should_combine(&last.data, ud)) force_wide = 1; + else if (utf8_should_combine(ud, &last.data)) + force_wide = 1; else if (!utf8_has_zwj(&last.data)) return (0); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/screen.c new/tmux-3.6a/screen.c --- old/tmux-3.6/screen.c 2025-11-13 08:17:31.000000000 +0100 +++ new/tmux-3.6a/screen.c 2025-12-02 15:25:05.000000000 +0100 @@ -594,8 +594,12 @@ if (COLOUR_DEFAULT(dst->bg)) dst->bg = src->bg; utf8_copy(&dst->data, &src->data); - dst->attr = src->attr; dst->flags = src->flags; + + if (dst->attr & GRID_ATTR_NOATTR) + dst->attr |= (src->attr & GRID_ATTR_CHARSET); + else + dst->attr |= src->attr; } /* Reflow wrapped lines. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/server-client.c new/tmux-3.6a/server-client.c --- old/tmux-3.6/server-client.c 2025-11-13 08:17:20.000000000 +0100 +++ new/tmux-3.6a/server-client.c 2025-12-05 06:37:48.000000000 +0100 @@ -613,7 +613,8 @@ line = wp->yoff + wp->sy; /* Check if point is within the pane or scrollbar. */ - if (((pane_status != PANE_STATUS_OFF && py != line) || + if (((pane_status != PANE_STATUS_OFF && + py != line && py != wp->yoff + wp->sy) || (wp->yoff == 0 && py < wp->sy) || (py >= wp->yoff && py < wp->yoff + wp->sy)) && ((sb_pos == PANE_SCROLLBARS_RIGHT && @@ -1270,7 +1271,11 @@ if (c->tty.mouse_scrolling_flag == 0 && where == SCROLLBAR_SLIDER) { c->tty.mouse_scrolling_flag = 1; - c->tty.mouse_slider_mpos = sl_mpos; + if (m->statusat == 0) { + c->tty.mouse_slider_mpos = sl_mpos + + m->statuslines; + } else + c->tty.mouse_slider_mpos = sl_mpos; } break; case WHEEL: @@ -2901,8 +2906,8 @@ struct window_pane *wp = server_client_get_pane(c), *loop; struct screen *s = NULL; struct options *oo = c->session->options; - int mode = 0, cursor, flags, n; - u_int cx = 0, cy = 0, ox, oy, sx, sy; + int mode = 0, cursor, flags; + u_int cx = 0, cy = 0, ox, oy, sx, sy, n; if (c->flags & (CLIENT_CONTROL|CLIENT_SUSPENDED)) return; @@ -2934,13 +2939,13 @@ if (c->prompt_string != NULL) { n = options_get_number(oo, "status-position"); if (n == 0) - cy = 0; + cy = status_prompt_line_at(c); else { - n = status_line_size(c); - if (n == 0) - cy = tty->sy - 1; - else + n = status_line_size(c) - status_prompt_line_at(c); + if (n <= tty->sy) cy = tty->sy - n; + else + cy = tty->sy - 1; } cx = c->prompt_cursor; } else if (c->overlay_draw == NULL) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/server-fn.c new/tmux-3.6a/server-fn.c --- old/tmux-3.6/server-fn.c 2025-11-07 13:35:48.000000000 +0100 +++ new/tmux-3.6a/server-fn.c 2025-11-26 19:43:11.000000000 +0100 @@ -20,6 +20,7 @@ #include <sys/wait.h> #include <sys/uio.h> +#include <signal.h> #include <stdlib.h> #include <string.h> #include <time.h> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/status.c new/tmux-3.6a/status.c --- old/tmux-3.6/status.c 2025-05-22 09:49:49.000000000 +0200 +++ new/tmux-3.6a/status.c 2025-11-27 08:24:50.000000000 +0100 @@ -264,14 +264,19 @@ } /* Get the prompt line number for client's session. 1 means at the bottom. */ -static u_int +u_int status_prompt_line_at(struct client *c) { struct session *s = c->session; + u_int line, lines; - if (c->flags & (CLIENT_STATUSOFF|CLIENT_CONTROL)) - return (1); - return (options_get_number(s->options, "message-line")); + lines = status_line_size(c); + if (lines == 0) + return (0); + line = options_get_number(s->options, "message-line"); + if (line >= lines) + return (lines - 1); + return (line); } /* Get window at window list position. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/style.c new/tmux-3.6a/style.c --- old/tmux-3.6/style.c 2025-06-24 15:58:57.000000000 +0200 +++ new/tmux-3.6a/style.c 2025-12-02 15:25:05.000000000 +0100 @@ -218,20 +218,23 @@ sy->gc.attr = 0; else if (end > 2 && strncasecmp(tmp, "no", 2) == 0) { if (strcmp(tmp + 2, "attr") == 0) - value = 0xffff & ~GRID_ATTR_CHARSET; - else if ((value = attributes_fromstring(tmp + 2)) == -1) - goto error; - sy->gc.attr &= ~value; + sy->gc.attr |= GRID_ATTR_NOATTR; + else { + value = attributes_fromstring(tmp + 2); + if (value == -1) + goto error; + sy->gc.attr &= ~value; + } } else if (end > 6 && strncasecmp(tmp, "width=", 6) == 0) { - n = strtonum(tmp + 6, 0, UINT_MAX, &errstr); - if (errstr != NULL) - goto error; - sy->width = (int)n; + n = strtonum(tmp + 6, 0, UINT_MAX, &errstr); + if (errstr != NULL) + goto error; + sy->width = (int)n; } else if (end > 4 && strncasecmp(tmp, "pad=", 4) == 0) { - n = strtonum(tmp + 4, 0, UINT_MAX, &errstr); - if (errstr != NULL) - goto error; - sy->pad = (int)n; + n = strtonum(tmp + 4, 0, UINT_MAX, &errstr); + if (errstr != NULL) + goto error; + sy->pad = (int)n; } else { if ((value = attributes_fromstring(tmp)) == -1) goto error; @@ -344,13 +347,13 @@ attributes_tostring(gc->attr)); comma = ","; } - if (sy->width >= 0) { - xsnprintf(s + off, sizeof s - off, "%swidth=%u", comma, + if (sy->width >= 0) { + xsnprintf(s + off, sizeof s - off, "%swidth=%u", comma, sy->width); comma = ","; } - if (sy->pad >= 0) { - xsnprintf(s + off, sizeof s - off, "%spad=%u", comma, + if (sy->pad >= 0) { + xsnprintf(s + off, sizeof s - off, "%spad=%u", comma, sy->pad); comma = ","; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/tmux.h new/tmux-3.6a/tmux.h --- old/tmux-3.6/tmux.h 2025-11-19 22:24:43.000000000 +0100 +++ new/tmux-3.6a/tmux.h 2025-12-05 06:37:44.000000000 +0100 @@ -727,6 +727,7 @@ #define GRID_ATTR_UNDERSCORE_4 0x800 #define GRID_ATTR_UNDERSCORE_5 0x1000 #define GRID_ATTR_OVERLINE 0x2000 +#define GRID_ATTR_NOATTR 0x4000 /* All underscore attributes. */ #define GRID_ATTR_ALL_UNDERSCORE \ @@ -2943,6 +2944,7 @@ void status_timer_start(struct client *); void status_timer_start_all(void); void status_update_cache(struct session *); +u_int status_prompt_line_at(struct client *); int status_at_line(struct client *); u_int status_line_size(struct client *); struct style_range *status_get_range(struct client *, u_int, u_int); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/tty.c new/tmux-3.6a/tty.c --- old/tmux-3.6/tty.c 2025-11-07 13:35:48.000000000 +0100 +++ new/tmux-3.6a/tty.c 2025-12-05 06:37:44.000000000 +0100 @@ -35,6 +35,8 @@ static int tty_log_fd = -1; +static void tty_start_timer_callback(int, short, void *); +static void tty_clipboard_query_callback(int, short, void *); static void tty_set_italics(struct tty *); static int tty_try_colour(struct tty *, int, const char *); static void tty_force_cursor_colour(struct tty *, int); @@ -296,6 +298,8 @@ if (tty->out == NULL) fatal("out of memory"); + evtimer_set(&tty->clipboard_timer, tty_clipboard_query_callback, tty); + evtimer_set(&tty->start_timer, tty_start_timer_callback, tty); evtimer_set(&tty->timer, tty_timer_callback, tty); tty_start_tty(tty); @@ -327,7 +331,6 @@ log_debug("%s: start timer started", c->name); evtimer_del(&tty->start_timer); - evtimer_set(&tty->start_timer, tty_start_timer_callback, tty); evtimer_add(&tty->start_timer, &tv); } @@ -445,6 +448,7 @@ tty->flags &= ~TTY_STARTED; evtimer_del(&tty->start_timer); + evtimer_del(&tty->clipboard_timer); event_del(&tty->timer); tty->flags &= ~TTY_BLOCK; @@ -3228,6 +3232,5 @@ tty_putcode_ss(tty, TTYC_MS, "", "?"); tty->flags |= TTY_OSC52QUERY; - evtimer_set(&tty->clipboard_timer, tty_clipboard_query_callback, tty); evtimer_add(&tty->clipboard_timer, &tv); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/utf8-combined.c new/tmux-3.6a/utf8-combined.c --- old/tmux-3.6/utf8-combined.c 2025-11-07 13:35:48.000000000 +0100 +++ new/tmux-3.6a/utf8-combined.c 2025-12-04 21:53:01.000000000 +0100 @@ -122,6 +122,7 @@ case 0x1F47C: case 0x1F481: case 0x1F482: + case 0x1F483: case 0x1F485: case 0x1F486: case 0x1F487: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tmux-3.6/window-copy.c new/tmux-3.6a/window-copy.c --- old/tmux-3.6/window-copy.c 2025-11-13 08:17:20.000000000 +0100 +++ new/tmux-3.6a/window-copy.c 2025-12-05 06:37:48.000000000 +0100 @@ -627,7 +627,7 @@ new_slider_y = sb_top - wp->yoff + (sb_height - slider_height); } else { /* Slider is somewhere in the middle. */ - new_slider_y = my - wp->yoff - sl_mpos + 1; + new_slider_y = my - wp->yoff - sl_mpos; } if (TAILQ_FIRST(&wp->modes) == NULL ||
