=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/screen-write.c,v retrieving revision 1.36 retrieving revision 1.37 diff -c -r1.36 -r1.37 *** src/usr.bin/tmux/screen-write.c 2009/10/20 19:18:28 1.36 --- src/usr.bin/tmux/screen-write.c 2009/11/11 18:53:21 1.37 *************** *** 1,4 **** ! /* $OpenBSD: screen-write.c,v 1.36 2009/10/20 19:18:28 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: screen-write.c,v 1.37 2009/11/11 18:53:21 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott *************** *** 1039,1044 **** --- 1039,1046 ---- /* Construct UTF-8 and write it. */ gu.width = utf8data->width; memset(gu.data, 0xff, sizeof gu.data); + if (utf8data->size == 0) + fatalx("UTF-8 data empty"); if (utf8data->size > sizeof gu.data) fatalx("UTF-8 data overflow"); memcpy(gu.data, utf8data->data, utf8data->size); *************** *** 1084,1089 **** --- 1086,1095 ---- if (s->cx == 0) return (-1); + /* Empty utf8data is out. */ + if (utf8data->size == 0) + fatalx("UTF-8 data empty"); + /* Retrieve the previous cell and convert to UTF-8 if not already. */ gc = grid_view_get_cell(gd, s->cx - 1, s->cy); if (!(gc->flags & GRID_FLAG_UTF8)) { *************** *** 1108,1113 **** --- 1114,1120 ---- gu->data[i] = '_'; if (i != UTF8_SIZE) gu->data[i] = 0xff; + gu->width = i; return (0); } *************** *** 1166,1179 **** gu = grid_view_peek_utf8(gd, s->cx, s->cy); if (gu->width > 1) { /* ! * An UTF-8 wide cell; overwrite following padding cells only. */ xx = s->cx; while (++xx < screen_size_x(s)) { gc = grid_view_peek_cell(gd, xx, s->cy); if (!(gc->flags & GRID_FLAG_PADDING)) break; ! grid_view_set_cell(gd, xx, s->cy, &grid_default_cell); } } } --- 1173,1188 ---- gu = grid_view_peek_utf8(gd, s->cx, s->cy); if (gu->width > 1) { /* ! * An UTF-8 wide cell; overwrite following padding ! * cells only. */ xx = s->cx; while (++xx < screen_size_x(s)) { gc = grid_view_peek_cell(gd, xx, s->cy); if (!(gc->flags & GRID_FLAG_PADDING)) break; ! grid_view_set_cell( ! gd, xx, s->cy, &grid_default_cell); } } }