aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/exceptions.h5
-rw-r--r--src/noise.cpp4
-rw-r--r--src/noise.h8
3 files changed, 13 insertions, 4 deletions
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 @@ public:
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 @@ public:
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;
}