mu: swap begin and end if begin is _numerically_ bigger than end

The old behaviour would compare the strings, so would swap the start and end
ranges if start was 3K and end was 2M.

Fixes: 964
This commit is contained in:
Stig Brautaset 2016-12-03 23:17:26 +00:00
parent b8711d22c8
commit e9c6568a57
2 changed files with 4 additions and 3 deletions

View File

@ -115,13 +115,13 @@ public:
if (!substitute_size (begin) || !substitute_size (end))
return Xapian::BAD_VALUENO;
begin = Xapian::sortable_serialise (atol(begin.c_str()));
end = Xapian::sortable_serialise (atol(end.c_str()));
/* swap if b > e */
if (begin > end)
std::swap (begin, end);
begin = Xapian::sortable_serialise (atol(begin.c_str()));
end = Xapian::sortable_serialise (atol(end.c_str()));
return (Xapian::valueno)MU_MSG_FIELD_ID_SIZE;
}
private:

View File

@ -507,6 +507,7 @@ test_mu_query_sizes (void)
int i;
QResults queries[] = {
{ "size:0b..2m", 19},
{ "size:3b..2m", 19},
{ "size:2k..4k", 4},
{ "size:2m..0b", 19}
};