mirror of
https://github.com/mjl-/mox.git
synced 2024-12-26 16:33:47 +03:00
fix bug in imapserver with matching if a uid is in a uidset
for a uid set, the syntax <num>:* must be interpreted as <num>:<maxuid>. a wrong check turned the uid set into <maxuid>:<maxuid>. that check was meant for the case where <num> is higher than <maxuid>, in which case num must be replaced with maxuid. this affected "uid expunge" with a uid set, possibly causing messages marked for deletion not to be actually removed, and this affected "search" with the uid parameter, possibly not returning all messages that were searched for. found while writing tests for upcoming condstore/qresync extensions.
This commit is contained in:
parent
590ed0b81d
commit
1e049a087d
2 changed files with 4 additions and 1 deletions
|
@ -63,7 +63,7 @@ func (ss numSet) containsUID(uid store.UID, uids []store.UID, searchResult []sto
|
|||
last = store.UID(r.last.number)
|
||||
if r.last.star {
|
||||
last = uids[len(uids)-1]
|
||||
if last > first {
|
||||
if first > last {
|
||||
first = last
|
||||
}
|
||||
} else if r.first.star && last < first {
|
||||
|
|
|
@ -48,6 +48,9 @@ func TestNumSetContains(t *testing.T) {
|
|||
check(!ss2.containsUID(2, []store.UID{4, 5}, nil))
|
||||
check(!ss2.containsUID(2, []store.UID{1}, nil))
|
||||
|
||||
check(ss2.containsUID(2, []store.UID{2, 6}, nil))
|
||||
check(ss2.containsUID(6, []store.UID{2, 6}, nil))
|
||||
|
||||
// *:2
|
||||
ss3 := numSet{false, []numRange{{*star, num(2)}}}
|
||||
check(ss3.containsSeq(1, []store.UID{2}, nil))
|
||||
|
|
Loading…
Reference in a new issue