diff options
author | Craig Robbins <kde.psych@gmail.com> | 2014-08-07 15:39:12 +1000 |
---|---|---|
committer | RealBadAngel <maciej.kasatkin@o2.pl> | 2014-08-23 06:40:27 +0200 |
commit | f33d31693ed2ab7d2a29320181b6aba2c12f76d3 (patch) | |
tree | b440bfeb24c4beddd5a73ea7ab4f9c4452733a39 /src/treegen.h | |
parent | 996ea60642c5d78fc915573af0641d78bc7e2d49 (diff) | |
download | minetest-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.h | 10 |
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 |