Thanks. How about this instead?
Index: tty-term.c
===================================================================
RCS file: /cvs/src/usr.bin/tmux/tty-term.c,v
retrieving revision 1.82
diff -u -p -r1.82 tty-term.c
--- tty-term.c 5 Jun 2020 09:32:15 -0000 1.82
+++ tty-term.c 23 Aug 2020 20:14:19 -0000
@@ -302,6 +302,8 @@ tty_term_strip(const char *s)
ptr++;
if (*ptr == '>')
ptr++;
+ if (*ptr == '\0')
+ break;
}
buf[len++] = *ptr;
On Sat, Aug 22, 2020 at 08:15:01PM -0400, Dave Vandervies wrote:
> Since upgrading to 6.7 I've occasionally seen the tmux server crash
> when a client connects to a session.
> (I can't say for sure that it never happened pre-6.7, since it's
> occasional and my usage patterns have drifted over time.)
>
> Today it annoyed me enough to track it down, and it looks like a
> loop index management bug in the terminal escape code handling;
> there's a loop that scans through a string and discards some
> substrings, and the body of the loop can leave the pointer pointing
> at the '\0' byte that terminates the string. When this happens,
> the loop control advances the pointer again, past the terminator
> byte, so it keeps examining whatever comes next.
>
> Index: tty-term.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/tmux/tty-term.c,v
> retrieving revision 1.76
> diff -u -p -r1.76 tty-term.c
> --- tty-term.c 23 Apr 2020 10:22:53 -0000 1.76
> +++ tty-term.c 23 Aug 2020 00:05:09 -0000
> @@ -295,7 +295,7 @@ tty_term_strip(const char *s)
> }
>
> buf[len++] = *ptr;
> - if (len == (sizeof buf) - 1)
> + if (len == (sizeof buf) - 1 || *ptr == '\0')
> break;
> }
> buf[len] = '\0';
>