summaryrefslogtreecommitdiff
path: root/src/treegen.h
diff options
context:
space:
mode:
authorCraig Robbins <kde.psych@gmail.com>2014-08-07 15:39:12 +1000
committerRealBadAngel <maciej.kasatkin@o2.pl>2014-08-23 06:40:27 +0200
commitf33d31693ed2ab7d2a29320181b6aba2c12f76d3 (patch)
treeb440bfeb24c4beddd5a73ea7ab4f9c4452733a39 /src/treegen.h
parent996ea60642c5d78fc915573af0641d78bc7e2d49 (diff)
downloadminetest-f33d31693ed2ab7d2a29320181b6aba2c12f76d3.tar.gz
minetest-f33d31693ed2ab7d2a29320181b6aba2c12f76d3.tar.bz2
minetest-f33d31693ed2ab7d2a29320181b6aba2c12f76d3.zip
Fix seg fault if popping from empty stack (L-system trees)
See: https://github.com/minetest/minetest/issues/1525 Background Wuzzy2: If you attempt to spawn a L-system tree with minetest.spawn_tree, you can make Minetest crash if it is attempted to pop an empty stack. ShadowNinja: This shouldn't cause a segmentation fault, but it should throw a Lua error Commit Description This commit throws a Lua error instead of causing a segmentation fault. The server will still "crash" but will include a Lua backtrace. L-Systems fix randomness Unless a random seed is provided (via Lua treedef) seed the PRNG with a different seed for each tree Resolves: https://github.com/minetest/minetest/issues/1469 Fix l-system crash when treedef random_level not set by Lua
Diffstat (limited to 'src/treegen.h')
-rw-r--r--src/treegen.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/treegen.h b/src/treegen.h
index 55da6f9e5..a557ad975 100644
--- a/src/treegen.h
+++ b/src/treegen.h
@@ -30,6 +30,11 @@ class ServerEnvironment;
namespace treegen {
+ enum error {
+ SUCCESS,
+ UNBALANCED_BRACKETS
+ };
+
struct TreeDef {
std::string initial_axiom;
std::string rules_a;
@@ -50,6 +55,7 @@ namespace treegen {
MapNode fruitnode;
int fruit_chance;
int seed;
+ bool explicit_seed;
};
// Add default tree
@@ -60,10 +66,10 @@ namespace treegen {
INodeDefManager *ndef, int seed);
// Add L-Systems tree (used by engine)
- void make_ltree(ManualMapVoxelManipulator &vmanip, v3s16 p0, INodeDefManager *ndef,
+ treegen::error make_ltree(ManualMapVoxelManipulator &vmanip, v3s16 p0, INodeDefManager *ndef,
TreeDef tree_definition);
// Spawn L-systems tree from LUA
- void spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef,
+ treegen::error spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef,
TreeDef tree_definition);
// L-System tree gen helper functions