Fix #8799: NGameAllowedSorter() is not imposing strict weak ordering relation (#8801)

In other words, it should only (!) return true if A comes for B.
This promise was broken for the situation where two values are
identical. It would return true in these cases too. This is of
course not possible: if two values are identical, neither come
before the other. As such, the sorter was not imposing strict
weak ordering relations.

libstdc++ handled this scenario just fine, but libc++ crashes
badly on this, as it allowed comparing of [begin, end] instead
of [begin, end).
libc++ considered this not a bug (and by specs, they are correct;
just this way of crashing is of course a bit harsh):
https://bugs.llvm.org/show_bug.cgi?id=47903
pull/223/head
Patric Stout 3 years ago committed by GitHub
parent 937d60f239
commit 0243ae4654
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -333,7 +333,7 @@ protected:
if (r == 0) r = a->info.use_password - b->info.use_password;
/* Finally sort on the number of clients of the server in reverse order. */
return (r != 0) ? r < 0 : !NGameClientSorter(a, b);
return (r != 0) ? r < 0 : NGameClientSorter(b, a);
}
/** Sort the server list */

Loading…
Cancel
Save