Thanks - applied to OpenBSD will be in git soon.

On Fri, Apr 11, 2014 at 09:28:13PM +0200, Julien Rebetez wrote:
> The fix works for me !
> Thank you
> 
> On Fri, Apr 11, 2014 at 9:10 PM, Nicholas Marriott
> <nicholas.marri...@gmail.com> wrote:
> > It doesn't crash for me, but this does:
> >
> > tmux setb $(perl -e "print \"x\"x1042")
> >
> > Please try this fix (also fixes some other similar things):
> >
> >
> > diff --git a/arguments.c b/arguments.c
> > index d4e5e53..fd656b1 100644
> > --- a/arguments.c
> > +++ b/arguments.c
> > @@ -125,7 +125,7 @@ args_free(struct args *args)
> >  size_t
> >  args_print(struct args *args, char *buf, size_t len)
> >  {
> > -       size_t                   off;
> > +       size_t                   off, used;
> >         int                      i;
> >         const char              *quotes;
> >         struct args_entry       *entry;
> > @@ -165,9 +165,12 @@ args_print(struct args *args, char *buf, size_t len)
> >                         quotes = "\"";
> >                 else
> >                         quotes = "";
> > -               off += xsnprintf(buf + off, len - off, "%s-%c %s%s%s",
> > +               used = xsnprintf(buf + off, len - off, "%s-%c %s%s%s",
> >                     off != 0 ? " " : "", entry->flag, quotes, entry->value,
> >                     quotes);
> > +               if (used > len - off)
> > +                       used = len - off;
> > +               off += used;
> >         }
> >
> >         /* And finally the argument vector. */
> > @@ -181,8 +184,11 @@ args_print(struct args *args, char *buf, size_t len)
> >                         quotes = "\"";
> >                 else
> >                         quotes = "";
> > -               off += xsnprintf(buf + off, len - off, "%s%s%s%s",
> > +               used = xsnprintf(buf + off, len - off, "%s%s%s%s",
> >                     off != 0 ? " " : "", quotes, args->argv[i], quotes);
> > +               if (used > len - off)
> > +                       used = len - off;
> > +               off += used;
> >         }
> >
> >         return (off);
> > diff --git a/cmd-list.c b/cmd-list.c
> > index 08e2067..7ef8d1c 100644
> > --- a/cmd-list.c
> > +++ b/cmd-list.c
> > @@ -103,7 +103,7 @@ size_t
> >  cmd_list_print(struct cmd_list *cmdlist, char *buf, size_t len)
> >  {
> >         struct cmd      *cmd;
> > -       size_t           off;
> > +       size_t           off, used;
> >
> >         off = 0;
> >         TAILQ_FOREACH(cmd, &cmdlist->list, qentry) {
> > @@ -112,8 +112,12 @@ cmd_list_print(struct cmd_list *cmdlist, char *buf, 
> > size_t len)
> >                 off += cmd_print(cmd, buf + off, len - off);
> >                 if (off >= len)
> >                         break;
> > -               if (TAILQ_NEXT(cmd, qentry) != NULL)
> > -                       off += xsnprintf(buf + off, len - off, " ; ");
> > +               if (TAILQ_NEXT(cmd, qentry) != NULL) {
> > +                       used = xsnprintf(buf + off, len - off, " ; ");
> > +                       if (used > len - off)
> > +                               used = len - off;
> > +                       off += used;
> > +               }
> >         }
> >         return (off);
> >  }
> > diff --git a/window-copy.c b/window-copy.c
> > index 9aaf554..42b81d2 100644
> > --- a/window-copy.c
> > +++ b/window-copy.c
> > @@ -1194,8 +1194,8 @@ window_copy_write_line(
> >                 screen_write_puts(ctx, &gc, "%s", hdr);
> >         } else if (py == last && data->inputtype != WINDOW_COPY_OFF) {
> >                 limit = sizeof hdr;
> > -               if (limit > screen_size_x(s))
> > -                       limit = screen_size_x(s);
> > +               if (limit > screen_size_x(s) + 1)
> > +                       limit = screen_size_x(s) + 1;
> >                 if (data->inputtype == WINDOW_COPY_NUMERICPREFIX) {
> >                         xoff = size = xsnprintf(hdr, limit,
> >                             "Repeat: %u", data->numprefix);
> > @@ -1208,10 +1208,12 @@ window_copy_write_line(
> >         } else
> >                 size = 0;
> >
> > -       screen_write_cursormove(ctx, xoff, py);
> > -       screen_write_copy(ctx, data->backing, xoff,
> > -           (screen_hsize(data->backing) - data->oy) + py,
> > -           screen_size_x(s) - size, 1);
> > +       if (size < screen_size_x(s)) {
> > +               screen_write_cursormove(ctx, xoff, py);
> > +               screen_write_copy(ctx, data->backing, xoff,
> > +                   (screen_hsize(data->backing) - data->oy) + py,
> > +                   screen_size_x(s) - size, 1);
> > +       }
> >
> >         if (py == data->cy && data->cx == screen_size_x(s)) {
> >                 memcpy(&gc, &grid_default_cell, sizeof gc);
> >
> >
> >
> > On Fri, Apr 11, 2014 at 05:06:23PM +0200, Julien Rebetez wrote:
> >> I can still reproduce on tmux from git.
> >>
> >> Here is the gdb backtrace (once with 'bt full') from the core dump.
> >>
> >> Best regards,
> >> Julien
> >>
> >>
> >> On Fri, Apr 11, 2014 at 4:40 PM, Nicholas Marriott
> >> <nicholas.marri...@gmail.com> wrote:
> >> > Hi
> >> >
> >> > tmux doesn't crash for me, please try to build tmux from git and see if
> >> > you can still reproduce.
> >> >
> >> > If you can, please see if there is a core file and send me a backtrace
> >> > from gdb.
> >> >
> >> >
> >> > On Fri, Apr 11, 2014 at 04:30:54PM +0200, Julien Rebetez wrote:
> >> >> Hello,
> >> >> First, thanks for this wonderful software !
> >> >>
> >> >> I am using tslime[1] with a custom vim plugin [2] to copy/paste code
> >> >> from vim to an ipython session running in tmux. It's working great but
> >> >> sometimes, tmux crashes with "[lost server]".
> >> >>
> >> >> In the background, tslime use 'tmux set-buffer' to send text to tmux.
> >> >> It seems the crash is very dependent on the content of the buffer and
> >> >> it mostly happens with somewhat large buffers.
> >> >>
> >> >> I wrote a small script [3] that contains an example buffer that
> >> >> reproduces the crash.
> >> >>
> >> >> For example :
> >> >> $ ./crash_tmux.sh
> >> >> failed to connect to server: Connection refused
> >> >>
> >> >> If I remove (or add) one line from the buffer (for example the "if
> >> >> True" near the end), tmux doesn't crash anymore :
> >> >> # Modify crash_tmux.sh to remove the "if True" line
> >> >> $ ./crash_tmux.sh
> >> >> test: 1 windows (created Fri Apr 11 15:25:26 2014) [80x22]
> >> >>
> >> >> System informations :
> >> >> - tmux version : 1.9a
> >> >> - terminal emulator : gnome-terminal
> >> >> - $TERM : xterm-256color
> >> >> - OS : Ubuntu 13.10
> >> >>
> >> >> I also tried removing my .tmux.conf, but it doesn't help.
> >> >>
> >> >> Then, I checked out the git master and started a bisect. (see
> >> >> bisect.log on the gist [3] linked below). It seems the problem is
> >> >> introduced in this revision :
> >> >> http://sourceforge.net/p/tmux/tmux-code/ci/f8c86a9515ae863fcbc38769544be983ce494a3c
> >> >>
> >> >> So I tried commenting out the lines added by this commit and it
> >> >> appears line 217 of cmd-queue.c is the problem :
> >> >>
> >> >>   cmd_print(cmdq->cmd, s, sizeof s);
> >> >>
> >> >> If i comment this line, the crash goes away ! Since this seems like
> >> >> those are debug statements, I'll try to run the patched tmux and I'll
> >> >> see if I get any more crashes in the next days.
> >> >>
> >> >> Best regards
> >> >> Julien
> >> >>
> >> >> [1] https://github.com/kikijump/tslime.vim
> >> >> [2] https://github.com/julienr/vimux-pyutils
> >> >> [3] https://gist.github.com/julienr/10470414
> >> >>
> >> >> ------------------------------------------------------------------------------
> >> >> Put Bad Developers to Shame
> >> >> Dominate Development with Jenkins Continuous Integration
> >> >> Continuously Automate Build, Test & Deployment
> >> >> Start a new project now. Try Jenkins in the cloud.
> >> >> http://p.sf.net/sfu/13600_Cloudbees
> >> >> _______________________________________________
> >> >> tmux-users mailing list
> >> >> tmux-users@lists.sourceforge.net
> >> >> https://lists.sourceforge.net/lists/listinfo/tmux-users
> >
> >> [New LWP 8918]
> >> [Thread debugging using libthread_db enabled]
> >> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
> >> Core was generated by `/home/julien/programs/tmux-git/_install/bin/tmux 
> >> new-session -d -s test -n test'.
> >> Program terminated with signal 6, Aborted.
> >> #0  0x00007fc549950f77 in __GI_raise (sig=sig@entry=6) at 
> >> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> >> #0  0x00007fc549950f77 in __GI_raise (sig=sig@entry=6) at 
> >> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> >> #1  0x00007fc5499545e8 in __GI_abort () at abort.c:90
> >> #2  0x00007fc54998e4fb in __libc_message (do_abort=do_abort@entry=1, 
> >> fmt=fmt@entry=0x7fc549a9ff10 "*** %s ***: %s terminated\n") at 
> >> ../sysdeps/unix/sysv/linux/libc_fatal.c:199
> >> #3  0x00007fc549a2c08c in __GI___fortify_fail (msg=<optimized out>, 
> >> msg@entry=0x7fc549a9fef8 "stack smashing detected") at fortify_fail.c:37
> >> #4  0x00007fc549a2c030 in __stack_chk_fail () at stack_chk_fail.c:28
> >> #5  0x000000000041016e in cmdq_continue (cmdq=0x1218a10) at cmd-queue.c:267
> >> #6  0x000000000040fd05 in cmdq_run (cmdq=0x1218a10, cmdlist=0x1220d60) at 
> >> cmd-queue.c:176
> >> #7  0x00000000004362ea in server_client_msg_command (c=0x1222f40, 
> >> imsg=0x7fffba5bfe20) at server-client.c:943
> >> #8  0x0000000000435e11 in server_client_msg_dispatch (c=0x1222f40) at 
> >> server-client.c:836
> >> #9  0x000000000043476d in server_client_callback (fd=5, events=2, 
> >> data=0x1222f40) at server-client.c:231
> >> #10 0x00007fc549f09f94 in event_base_loop () from 
> >> /usr/lib/x86_64-linux-gnu/libevent-2.0.so.5
> >> #11 0x0000000000438fde in server_loop () at server.c:210
> >> #12 0x0000000000438fbd in server_start (lockfd=5, lockfile=0x121a650 "") 
> >> at server.c:201
> >> #13 0x0000000000405ded in client_connect (path=0x692a60 <socket_path> 
> >> "/tmp/tmux-1000/default", start_server=1) at client.c:130
> >> #14 0x00000000004060ff in client_main (argc=6, argv=0x7fffba5c3400, 
> >> flags=65536) at client.c:238
> >> #15 0x0000000000443c5e in main (argc=6, argv=0x7fffba5c3400) at tmux.c:389
> >
> >> [New LWP 8918]
> >> [Thread debugging using libthread_db enabled]
> >> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
> >> Core was generated by `/home/julien/programs/tmux-git/_install/bin/tmux 
> >> new-session -d -s test -n test'.
> >> Program terminated with signal 6, Aborted.
> >> #0  0x00007fc549950f77 in __GI_raise (sig=sig@entry=6) at 
> >> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> >> #0  0x00007fc549950f77 in __GI_raise (sig=sig@entry=6) at 
> >> ../nptl/sysdeps/unix/sysv/linux/raise.c:56
> >>         resultvar = 0
> >>         pid = 8918
> >>         selftid = 8918
> >> #1  0x00007fc5499545e8 in __GI_abort () at abort.c:90
> >>         save_stage = 2
> >>         act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 
> >> 0x0}, sa_mask = {__val = {4569798, 140736319977008, 140736319976992, 
> >> 4590425, 4590427, 140736319977464, 1234581650, 0, 0, 0, 0, 0, 0, 0, 0, 
> >> 4294967295}}, sa_flags = 0, sa_restorer = 0xffffffff00000000}
> >>         sigs = {__val = {32, 0 <repeats 15 times>}}
> >> #2  0x00007fc54998e4fb in __libc_message (do_abort=do_abort@entry=1, 
> >> fmt=fmt@entry=0x7fc549a9ff10 "*** %s ***: %s terminated\n") at 
> >> ../sysdeps/unix/sysv/linux/libc_fatal.c:199
> >>         ap = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 
> >> 0x7fffba5bf8e0, reg_save_area = 0x7fffba5bf7f0}}
> >>         ap_copy = {{gp_offset = 16, fp_offset = 48, overflow_arg_area = 
> >> 0x7fffba5bf8e0, reg_save_area = 0x7fffba5bf7f0}}
> >>         fd = 2
> >>         on_2 = <optimized out>
> >>         list = <optimized out>
> >>         nlist = <optimized out>
> >>         cp = <optimized out>
> >>         written = <optimized out>
> >> #3  0x00007fc549a2c08c in __GI___fortify_fail (msg=<optimized out>, 
> >> msg@entry=0x7fc549a9fef8 "stack smashing detected") at fortify_fail.c:37
> >>         do_abort = 1
> >> #4  0x00007fc549a2c030 in __stack_chk_fail () at stack_chk_fail.c:28
> >> No locals.
> >> #5  0x000000000041016e in cmdq_continue (cmdq=0x1218a10) at cmd-queue.c:267
> >>         next = 0x0
> >>         retval = CMD_RETURN_NORMAL
> >>         empty = 1
> >>         guard = 0
> >>         flags = 0
> >>         s = "set-buffer \"\"##\ndef laplacian_smoothing(verts, faces):\n   
> >>  \"\"\"\n    Laplacian mesh smoothing\n    
> >> http://en.wikipedia.org/wiki/Laplacian_smoothing\n\n    Basically, each 
> >> vertex is replaced by a weighted a"...
> >> #6  0x000000000040fd05 in cmdq_run (cmdq=0x1218a10, cmdlist=0x1220d60) at 
> >> cmd-queue.c:176
> >> No locals.
> >> #7  0x00000000004362ea in server_client_msg_command (c=0x1222f40, 
> >> imsg=0x7fffba5bfe20) at server-client.c:943
> >>         data = {argc = 2}
> >>         buf = 0x1235c94 "set-buffer"
> >>         len = 1038
> >>         cmdlist = 0x1220d60
> >>         argc = 2
> >>         argv = 0x1240440
> >>         cause = 0x0
> >>         __func__ = "server_client_msg_command"
> >> #8  0x0000000000435e11 in server_client_msg_dispatch (c=0x1222f40) at 
> >> server-client.c:836
> >>         imsg = {hdr = {type = 200, len = 1058, flags = 0, peerid = 8, pid 
> >> = 4294967295}, fd = -1, data = 0x1235c90}
> >>         stdindata = {size = 0, data = '\000' <repeats 7440 times>...}
> >>         data = 0x1235c90 "\002"
> >>         n = 1058
> >>         datalen = 1042
> >>         __func__ = "server_client_msg_dispatch"
> >> #9  0x000000000043476d in server_client_callback (fd=5, events=2, 
> >> data=0x1222f40) at server-client.c:231
> >>         c = 0x1222f40
> >> #10 0x00007fc549f09f94 in event_base_loop () from 
> >> /usr/lib/x86_64-linux-gnu/libevent-2.0.so.5
> >> No symbol table info available.
> >> #11 0x0000000000438fde in server_loop () at server.c:210
> >> No locals.
> >> #12 0x0000000000438fbd in server_start (lockfd=5, lockfile=0x121a650 "") 
> >> at server.c:201
> >>         pair = {6, 7}
> >>         tv = {tv_sec = 1, tv_usec = 0}
> >>         cause = 0x6 <Address 0x6 out of bounds>
> >>         __func__ = "server_start"
> >> #13 0x0000000000405ded in client_connect (path=0x692a60 <socket_path> 
> >> "/tmp/tmux-1000/default", start_server=1) at client.c:130
> >>         sa = {sun_family = 1, sun_path = "/tmp/tmux-1000/default", '\000' 
> >> <repeats 85 times>}
> >>         size = 22
> >>         fd = 5
> >>         lockfd = 5
> >>         lockfile = 0x121a650 ""
> >>         __func__ = "client_connect"
> >> #14 0x00000000004060ff in client_main (argc=6, argv=0x7fffba5c3400, 
> >> flags=65536) at client.c:238
> >>         cmd = 0x0
> >>         cmdlist = 0x121a4d0
> >>         data = 0x28282353
> >>         cmdflags = 3
> >>         fd = 1242818656
> >>         i = 18981200
> >>         ppid = 32709
> >>         msg = MSG_COMMAND
> >>         cause = 0x0
> >>         tio = {c_iflag = 1313166917, c_oflag = 1330536276, c_cflag = 
> >> 1280069456, c_lflag = 0, c_line = 1 '\001', c_cc = 
> >> "\000\000\000T_NO\000\000\000\000\000\000\000\000\200!\\\272\377\177\000\000\020\361\357I\305\177\000\000",
> >>  c_ispeed = 0, c_ospeed = 3126600080}
> >>         saved_tio = {c_iflag = 4208704, c_oflag = 0, c_cflag = 1998626048, 
> >> c_lflag = 4131902374, c_line = 0 '\000', c_cc = '\000' <repeats 15 times>, 
> >> "\220!\\\272\377\177\000\000@8@\000\000\000\000", <incomplete sequence 
> >> \360>, c_ispeed = 32767, c_ospeed = 0}
> >>         size = 140736319987952
> >> #15 0x0000000000443c5e in main (argc=6, argv=0x7fffba5c3400) at tmux.c:389
> >>         pw = 0x0
> >>         s = 0x0
> >>         path = 0x1219e30 "EVENT_NOEPOLL=1"
> >>         label = 0x1219e10 ""
> >>         var = 0x7fffba5c36f0
> >>         tmp = "/home/julien", '\000' <repeats 780 times>...
> >>         in = '\000' <repeats 255 times>
> >>         home = 0x7fffba5c5ccf "/home/julien"
> >>         pid = 0
> >>         opt = -1
> >>         flags = 65536
> >>         quiet = 0
> >>         keys = 1
> >>         session = 0
> >

------------------------------------------------------------------------------
Put Bad Developers to Shame
Dominate Development with Jenkins Continuous Integration
Continuously Automate Build, Test & Deployment 
Start a new project now. Try Jenkins in the cloud.
http://p.sf.net/sfu/13600_Cloudbees
_______________________________________________
tmux-users mailing list
tmux-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tmux-users

Reply via email to