summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2021-03-03 13:12:29 +0100
committerGitHub <noreply@github.com>2021-03-03 12:12:29 +0000
commit0243ae46547631c72e826ef28caae0637e7723dd (patch)
treea67b055063a09e4636280496cc428c0d4269ea7d
parent937d60f239641ee65580dacf1de55bb3d14860f3 (diff)
downloadopenttd-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.cpp2
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 */