From d8de72ca77a6bbe2e8b9244480d700d343a6a656 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Sun, 12 Jul 2009 17:11:07 +0000 Subject: [PATCH] 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. --- window-copy.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/window-copy.c b/window-copy.c index a8a9a762..1bbf8b9a 100644 --- a/window-copy.c +++ b/window-copy.c @@ -1,4 +1,4 @@ -/* $Id: window-copy.c,v 1.62 2009-07-12 16:56:56 nicm Exp $ */ +/* $Id: window-copy.c,v 1.63 2009-07-12 17:11:07 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott @@ -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)