From 86b1887aac82b86e1f2ad0f255bd872796dd4803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Mon, 28 Mar 2016 11:01:23 +0200 Subject: view: prevent creation of duplicated cursors Fail if there is already a cursor located at the requested position. --- view.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/view.c b/view.c index ebf2732..dad1dcd 100644 --- a/view.c +++ b/view.c @@ -1068,14 +1068,14 @@ Cursor *view_cursors_new(View *view, size_t pos) { Cursor *prev = NULL, *next = NULL; size_t cur = view_cursors_pos(view->cursor); - if (pos >= cur) { + if (pos > cur) { prev = view->cursor; for (next = prev->next; next; prev = next, next = next->next) { cur = view_cursors_pos(next); if (pos <= cur) break; } - } else { // pos < cur + } else if (pos < cur) { next = view->cursor; for (prev = next->prev; prev; next = prev, prev = prev->prev) { cur = view_cursors_pos(prev); @@ -1084,6 +1084,9 @@ Cursor *view_cursors_new(View *view, size_t pos) { } } + if (pos == cur) + goto err; + c->prev = prev; c->next = next; if (prev) @@ -1095,6 +1098,9 @@ Cursor *view_cursors_new(View *view, size_t pos) { view->cursor = c; view_cursors_to(c, pos); return c; +err: + free(c); + return NULL; } int view_cursors_count(View *view) { -- cgit v1.2.3