talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 78b5d80a0b371d3091b0a0ff85704e3d516222a6
parent d7493e38a465649d0e56b3e3c86f3b9085372d61
Author: Colin Leroy <colin@colino.net>
Date:   Fri, 23 May 2014 11:21:56 +0200

Fix crash with auto-indent

Diffstat:
Msrc/undo.c | 11+++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)

diff --git 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; } }