From 78b5d80a0b371d3091b0a0ff85704e3d516222a6 Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Fri, 23 May 2014 11:21:56 +0200 Subject: [PATCH 1/1] Fix crash with auto-indent --- src/undo.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/undo.c b/src/undo.c index 86cfdd1b9..61c457340 100644 --- a/src/undo.c +++ b/src/undo.c @@ -600,6 +600,9 @@ static void end_wrap_undo(UndoMain *undostruct) if (undostruct->wrap_info->start_pos == -1) goto cleanup; + cm_return_if_fail(undostruct->wrap_info->end_pos > undostruct->wrap_info->start_pos); + cm_return_if_fail(undostruct->wrap_info->end_pos - undostruct->wrap_info->len_change > undostruct->wrap_info->start_pos); + /* get the whole new (wrapped) contents */ buffer = gtk_text_view_get_buffer(undostruct->textview); gtk_text_buffer_get_start_iter(buffer, &start); @@ -668,14 +671,18 @@ static void update_wrap_undo(UndoMain *undostruct, const gchar *text, int start, * change, and the total length of the changed region * increases. */ - undostruct->wrap_info->end_pos = end; + if (end > undostruct->wrap_info->end_pos) { + undostruct->wrap_info->end_pos = end; + } undostruct->wrap_info->len_change += len; } else if (action == UNDO_ACTION_DELETE) { /* If deleting, the end of the region is at the start of the * change, and the total length of the changed region * decreases. */ - undostruct->wrap_info->end_pos = start; + if (start > undostruct->wrap_info->end_pos) { + undostruct->wrap_info->end_pos = start; + } undostruct->wrap_info->len_change -= len; } } -- 2.25.1