From: kwolekr Date: Mon, 27 Apr 2015 05:24:37 +0000 (-0400) Subject: Replace PRNG assertions with PrngException X-Git-Tag: 0.4.13~327 X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=cd1d625ab21e741e91be7d2190bb4fd59fab3200;p=minetest.git Replace PRNG assertions with PrngException --- diff --git a/src/exceptions.h b/src/exceptions.h index 0ea4c9350..6bf832828 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -120,6 +120,11 @@ class ClientStateError : public BaseException { ClientStateError(std::string s): BaseException(s) {} }; +class PrngException : public BaseException { +public: + PrngException(std::string s): BaseException(s) {} +}; + /* Some "old-style" interrupts: */ diff --git a/src/noise.cpp b/src/noise.cpp index 4bfc46f15..2e4588124 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -115,7 +115,9 @@ u32 PcgRandom::range(u32 bound) s32 PcgRandom::range(s32 min, s32 max) { - assert(max >= min); + if (max < min) + throw PrngException("Invalid range (max < min)"); + u32 bound = max - min + 1; return range(bound) + min; } diff --git a/src/noise.h b/src/noise.h index d2287835e..5757cbc99 100644 --- a/src/noise.h +++ b/src/noise.h @@ -26,8 +26,8 @@ #ifndef NOISE_HEADER #define NOISE_HEADER -#include "debug.h" #include "irr_v3d.h" +#include "exceptions.h" #include "util/string.h" extern FlagDesc flagdesc_noiseparams[]; @@ -56,14 +56,16 @@ class PseudoRandom { inline int range(int min, int max) { - assert(max >= min); + if (max < min) + throw PrngException("Invalid range (max < min)"); /* Here, we ensure the range is not too large relative to RANDOM_MAX, as otherwise the effects of bias would become noticable. Unlike PcgRandom, we cannot modify this RNG's range as it would change the output of this RNG for reverse compatibility. */ - assert((u32)(max - min) <= (RANDOM_RANGE + 1) / 10); + if ((u32)(max - min) > (RANDOM_RANGE + 1) / 10) + throw PrngException("Range too large"); return (next() % (max - min + 1)) + min; }