mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	noise: Throw exception on noise allocation failure
This commit is contained in:
		@@ -125,6 +125,18 @@ public:
 | 
			
		||||
	Some "old-style" interrupts:
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
class InvalidNoiseParamsException : public BaseException {
 | 
			
		||||
public:
 | 
			
		||||
	InvalidNoiseParamsException():
 | 
			
		||||
		BaseException("One or more noise parameters were invalid or require "
 | 
			
		||||
			"too much memory")
 | 
			
		||||
	{}
 | 
			
		||||
 | 
			
		||||
	InvalidNoiseParamsException(const std::string &s):
 | 
			
		||||
		BaseException(s)
 | 
			
		||||
	{}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class InvalidPositionException : public BaseException
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@
 | 
			
		||||
#include <string.h> // 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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -171,7 +171,7 @@ int LuaPerlinNoiseMap::l_get2dMap_flat(lua_State *L)
 | 
			
		||||
	n->perlinMap2D(p.X, p.Y);
 | 
			
		||||
 | 
			
		||||
	int maplen = n->sx * n->sy;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	lua_newtable(L);
 | 
			
		||||
	for (int i = 0; i != maplen; i++) {
 | 
			
		||||
		float noiseval = n->np->offset + n->np->scale * n->result[i];
 | 
			
		||||
@@ -220,7 +220,7 @@ int LuaPerlinNoiseMap::l_get3dMap_flat(lua_State *L)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	int maplen = n->sx * n->sy * n->sz;
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	lua_newtable(L);
 | 
			
		||||
	for (int i = 0; i != maplen; i++) {
 | 
			
		||||
		float noiseval = n->np->offset + n->np->scale * n->result[i];
 | 
			
		||||
@@ -231,7 +231,11 @@ int LuaPerlinNoiseMap::l_get3dMap_flat(lua_State *L)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LuaPerlinNoiseMap::LuaPerlinNoiseMap(NoiseParams *np, int seed, v3s16 size) {
 | 
			
		||||
	noise = new Noise(np, seed, size.X, size.Y, size.Z);
 | 
			
		||||
	try {
 | 
			
		||||
		noise = new Noise(np, seed, size.X, size.Y, size.Z);
 | 
			
		||||
	} catch (InvalidNoiseParamsException &e) {
 | 
			
		||||
		throw LuaError(e.what());
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
LuaPerlinNoiseMap::~LuaPerlinNoiseMap()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user