~sircmpwn/aerc

2804f000017c0ef6bcaf8d571627fa08784f48ac — Kevin Kuehler 1 year, 2 months ago b812257
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>
1 files changed, 10 insertions(+), 8 deletions(-)

M lib/msgstore.go
M lib/msgstore.go => lib/msgstore.go +10 -8
@@ 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
	}