diff options
author | Nicholas Marriott <nicm@cvs.openbsd.org> | 2009-07-11 19:09:25 +0000 |
---|---|---|
committer | Nicholas Marriott <nicm@cvs.openbsd.org> | 2009-07-11 19:09:25 +0000 |
commit | deeaba118282b268d101d4585e48d8782fdf9bca (patch) | |
tree | 825ec4035b08847a169961622457b435b2a8df97 | |
parent | 96c7ddd0b306927d8053114ffe456a3a6379677d (diff) |
Copy was using the real line length which after resize can be larger than the
screen width. When built with -DDEBUG, this made the grid bounds checking code
kill the server. Restrict copying to the actual width.
From Kalle Olavi Niemitalo, thanks.
-rw-r--r-- | usr.bin/tmux/window-copy.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/usr.bin/tmux/window-copy.c b/usr.bin/tmux/window-copy.c index e3cc2db8037..3bb667e2422 100644 --- a/usr.bin/tmux/window-copy.c +++ b/usr.bin/tmux/window-copy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: window-copy.c,v 1.3 2009/07/09 15:02:00 nicm Exp $ */ +/* $OpenBSD: window-copy.c,v 1.4 2009/07/11 19:09:24 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -522,7 +522,15 @@ window_copy_find_length(struct window_pane *wp, u_int py) const struct grid_cell *gc; u_int px; + /* + * If the pane has been resized, its grid can contain old overlong + * lines. grid_peek_cell does not allow accessing cells beyond the + * width of the grid, and screen_write_copy treats them as spaces, so + * ignore them here too. + */ px = wp->base.grid->size[py]; + if (px > screen_size_x(&wp->base)) + px = screen_size_x(&wp->base); while (px > 0) { gc = grid_peek_cell(wp->base.grid, px - 1, py); if (gc->flags & GRID_FLAG_UTF8) |