From: Colin Leroy Date: Fri, 23 May 2014 09:21:56 +0000 (+0200) Subject: Fix crash with auto-indent X-Git-Tag: 3.10.0~13 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=78b5d80a0b371d3091b0a0ff85704e3d516222a6;hp=d7493e38a465649d0e56b3e3c86f3b9085372d61 Fix crash with auto-indent --- 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; } }