diff options
author | Patric Stout <truebrain@openttd.org> | 2021-03-03 13:12:29 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-03 12:12:29 +0000 |
commit | 0243ae46547631c72e826ef28caae0637e7723dd (patch) | |
tree | a67b055063a09e4636280496cc428c0d4269ea7d | |
parent | 937d60f239641ee65580dacf1de55bb3d14860f3 (diff) | |
download | openttd-0243ae46547631c72e826ef28caae0637e7723dd.tar.xz |
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
-rw-r--r-- | src/network/network_gui.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 3e799221d..ae263cf00 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -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 */ |