From 5e66253de230ef3f9236ba71e94296d60b05aa3f Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 25 May 2014 14:42:22 +0200 Subject: Core/Misc: Throw an exception if client sends invalid float/double data Throw a ByteBufferException if client sends 1.#INF0000, 1.#QNAN000, 1.#IND0000 or other invalid float/double values. Handle this invalid values in StaticMapTree::isInLineOfSight() to avoid triggering an assert. Fixes #12126 --- src/server/collision/Maps/MapTree.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/server/collision/Maps/MapTree.cpp') diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp index bb57079c389..60069b5c81f 100644 --- a/src/server/collision/Maps/MapTree.cpp +++ b/src/server/collision/Maps/MapTree.cpp @@ -157,8 +157,7 @@ namespace VMAP { float maxDist = (pos2 - pos1).magnitude(); // return false if distance is over max float, in case of cheater teleporting to the end of the universe - if (maxDist == std::numeric_limits::max() || - maxDist == std::numeric_limits::infinity()) + if (maxDist == std::numeric_limits::max() || !isfinite(maxDist)) return false; // valid map coords should *never ever* produce float overflow, but this would produce NaNs too -- cgit v1.2.3 From b4327bfc69ce7e1243f53256b8a55f8c5c0ac2f1 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Sun, 25 May 2014 15:33:56 +0200 Subject: Core/Misc: Fix no-pch build --- src/server/collision/Maps/MapTree.cpp | 2 +- src/server/shared/Packets/ByteBuffer.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src/server/collision/Maps/MapTree.cpp') diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp index 60069b5c81f..d592d795125 100644 --- a/src/server/collision/Maps/MapTree.cpp +++ b/src/server/collision/Maps/MapTree.cpp @@ -157,7 +157,7 @@ namespace VMAP { float maxDist = (pos2 - pos1).magnitude(); // return false if distance is over max float, in case of cheater teleporting to the end of the universe - if (maxDist == std::numeric_limits::max() || !isfinite(maxDist)) + if (maxDist == std::numeric_limits::max() || !std::isfinite(maxDist)) return false; // valid map coords should *never ever* produce float overflow, but this would produce NaNs too diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index e06556423aa..9f766a72d19 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -31,6 +31,7 @@ #include #include #include +#include // Root of ByteBuffer exception hierarchy class ByteBufferException : public std::exception @@ -241,7 +242,7 @@ class ByteBuffer ByteBuffer &operator>>(float &value) { value = read(); - if (!isfinite(value)) + if (!std::isfinite(value)) throw ByteBufferException(); return *this; } @@ -249,7 +250,7 @@ class ByteBuffer ByteBuffer &operator>>(double &value) { value = read(); - if (!isfinite(value)) + if (!std::isfinite(value)) throw ByteBufferException(); return *this; } -- cgit v1.2.3