From 2804f000017c0ef6bcaf8d571627fa08784f48ac Mon Sep 17 00:00:00 2001 From: Kevin Kuehler Date: Sun, 28 Jul 2019 16:41:44 -0700 Subject: lib/msgstore: Fix Select, Next, Prev with filter When filter is active we want to use store.results instead of store.uids, since we are dealing with a subset of the uids. Otherwise any methods involving len will have undefined behavior. Signed-off-by: Kevin Kuehler --- lib/msgstore.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/msgstore.go b/lib/msgstore.go index 53faaac..48a105e 100644 --- a/lib/msgstore.go +++ b/lib/msgstore.go @@ -310,7 +310,7 @@ func (store *MessageStore) Uids() []uint32 { } func (store *MessageStore) Selected() *models.MessageInfo { - return store.Messages[store.uids[len(store.uids)-store.selected-1]] + return store.Messages[store.Uids()[len(store.Uids())-store.selected-1]] } func (store *MessageStore) SelectedIndex() int { @@ -318,32 +318,34 @@ func (store *MessageStore) SelectedIndex() int { } func (store *MessageStore) Select(index int) { + uids := store.Uids() store.selected = index - for ; store.selected < 0; store.selected = len(store.uids) + store.selected { + for ; store.selected < 0; store.selected = len(uids) + store.selected { /* This space deliberately left blank */ } - if store.selected > len(store.uids) { - store.selected = len(store.uids) + if store.selected > len(uids) { + store.selected = len(uids) } } func (store *MessageStore) nextPrev(delta int) { - if len(store.uids) == 0 { + uids := store.Uids() + if len(uids) == 0 { return } store.selected += delta if store.selected < 0 { store.selected = 0 } - if store.selected >= len(store.uids) { - store.selected = len(store.uids) - 1 + if store.selected >= len(uids) { + store.selected = len(uids) - 1 } nextResultIndex := len(store.results) - store.resultIndex - 2*delta if nextResultIndex < 0 || nextResultIndex >= len(store.results) { return } nextResultUid := store.results[nextResultIndex] - selectedUid := store.uids[len(store.uids)-store.selected-1] + selectedUid := uids[len(uids)-store.selected-1] if nextResultUid == selectedUid { store.resultIndex += delta } -- cgit v1.2.3