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';
> 

Reply via email to