Fixes a segmentation fault when terminal processes a DCH ansi escape code and 
the cursor is at the end of the row, and terminal_shift_line calls memmove on 
memory it doesn't own.
---
 clients/terminal.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/clients/terminal.c b/clients/terminal.c
index d7345d3..fc9b7ae 100644
--- a/clients/terminal.c
+++ b/clients/terminal.c
@@ -721,13 +721,16 @@ terminal_shift_line(struct terminal *terminal, int d)

        if (d < 0) {
                d = 0 - d;
-               memmove(&row[terminal->column],
-                       &row[terminal->column + d],
-                       (terminal->width - terminal->column - d) * sizeof(union 
utf8_char));
-               memmove(&attr_row[terminal->column], &attr_row[terminal->column 
+ d],
-                       (terminal->width - terminal->column - d) * 
sizeof(struct attr));
-               memset(&row[terminal->width - d], 0, d * sizeof(union 
utf8_char));
-               attr_init(&attr_row[terminal->width - d], terminal->curr_attr, 
d);
+
+               if(terminal->width - terminal->column) {
+                       memmove(&row[terminal->column],
+                               &row[terminal->column + d],
+                               (terminal->width - terminal->column - d) * 
sizeof(union utf8_char));
+                       memmove(&attr_row[terminal->column], 
&attr_row[terminal->column + d],
+                               (terminal->width - terminal->column - d) * 
sizeof(struct attr));
+                       memset(&row[terminal->width - d], 0, d * sizeof(union 
utf8_char));
+                       attr_init(&attr_row[terminal->width - d], 
terminal->curr_attr, d);
+               }
        } else {
                memmove(&row[terminal->column + d], &row[terminal->column],
                        (terminal->width - terminal->column - d) * sizeof(union 
utf8_char));
--
2.4.1
_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to