From 25945dc5395a03cab069ff0e6470ba8d59b03978 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 29 Nov 2014 16:50:18 -0500 Subject: noise: Throw exception on noise allocation failure --- src/noise.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/noise.cpp') diff --git a/src/noise.cpp b/src/noise.cpp index c0249a437..2d1b8d624 100644 --- a/src/noise.cpp +++ b/src/noise.cpp @@ -29,6 +29,7 @@ #include // memset #include "debug.h" #include "util/numeric.h" +#include "exceptions.h" #define NOISE_MAGIC_X 1619 #define NOISE_MAGIC_Y 31337 @@ -336,8 +337,12 @@ Noise::Noise(NoiseParams *np, int seed, int sx, int sy, int sz) this->noisebuf = NULL; resizeNoiseBuf(sz > 1); - this->buf = new float[sx * sy * sz]; - this->result = new float[sx * sy * sz]; + try { + this->buf = new float[sx * sy * sz]; + this->result = new float[sx * sy * sz]; + } catch (std::bad_alloc &e) { + throw InvalidNoiseParamsException(); + } } @@ -360,8 +365,12 @@ void Noise::setSize(int sx, int sy, int sz) delete[] buf; delete[] result; - this->buf = new float[sx * sy * sz]; - this->result = new float[sx * sy * sz]; + try { + this->buf = new float[sx * sy * sz]; + this->result = new float[sx * sy * sz]; + } catch (std::bad_alloc &e) { + throw InvalidNoiseParamsException(); + } } @@ -399,7 +408,11 @@ void Noise::resizeNoiseBuf(bool is3d) if (noisebuf) delete[] noisebuf; - noisebuf = new float[nlx * nly * nlz]; + try { + noisebuf = new float[nlx * nly * nlz]; + } catch (std::bad_alloc &e) { + throw InvalidNoiseParamsException(); + } } @@ -615,7 +628,7 @@ float *Noise::perlinMap2DModulated(float x, float y, float *persist_map) f *= 2.0; } - + delete[] g; return result; } -- cgit v1.2.3