diff options
author | Kevin Kuehler <keur@ocf.berkeley.edu> | 2019-07-28 16:41:44 -0700 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-07-29 14:51:39 -0400 |
commit | 2804f000017c0ef6bcaf8d571627fa08784f48ac (patch) | |
tree | c031fcd1e3121f005452e89de65093ec8443f59c | |
parent | b812257ba97020e90e7598378b54f737364a1636 (diff) |
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 <keur@ocf.berkeley.edu>
-rw-r--r-- | lib/msgstore.go | 18 |
1 files 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 } |