diff options
author | juhdanad <juhdanad@gmail.com> | 2016-11-28 09:43:33 +0100 |
---|---|---|
committer | Zeno- <kde.psych@gmail.com> | 2016-11-28 18:43:33 +1000 |
commit | 2fe3bf5a18eb9aa9f38654b3c0a0729c42408cd6 (patch) | |
tree | afccb5b126b0ca34694ad9e8052a85f6f1a44b7f /src | |
parent | bb06d377a163b2d168c9d327ad38b871132fa8ea (diff) | |
download | minetest-2fe3bf5a18eb9aa9f38654b3c0a0729c42408cd6.tar.gz minetest-2fe3bf5a18eb9aa9f38654b3c0a0729c42408cd6.tar.bz2 minetest-2fe3bf5a18eb9aa9f38654b3c0a0729c42408cd6.zip |
Limit light_source in the engine (#4814)
Since light_source>15 causes crash, it must be limited.
Diffstat (limited to 'src')
-rw-r--r-- | src/nodedef.cpp | 2 | ||||
-rw-r--r-- | src/script/common/c_content.cpp | 6 | ||||
-rw-r--r-- | src/voxelalgorithms.cpp | 1 |
3 files changed, 9 insertions, 0 deletions
diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 39ea1a60e..ccbb42c66 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -482,6 +482,7 @@ void ContentFeatures::deSerialize(std::istream &is) liquid_viscosity = readU8(is); liquid_renewable = readU8(is); light_source = readU8(is); + light_source = MYMIN(light_source, LIGHT_MAX); damage_per_second = readU32(is); node_box.deSerialize(is); selection_box.deSerialize(is); @@ -1442,6 +1443,7 @@ void ContentFeatures::deSerializeOld(std::istream &is, int version) liquid_alternative_source = deSerializeString(is); liquid_viscosity = readU8(is); light_source = readU8(is); + light_source = MYMIN(light_source, LIGHT_MAX); damage_per_second = readU32(is); node_box.deSerialize(is); selection_box.deSerialize(is); diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index f20a65903..541744895 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -526,6 +526,12 @@ ContentFeatures read_content_features(lua_State *L, int index) // Amount of light the node emits f.light_source = getintfield_default(L, index, "light_source", f.light_source); + if (f.light_source > LIGHT_MAX) { + warningstream << "Node " << f.name.c_str() + << " had greater light_source than " << LIGHT_MAX + << ", it was reduced." << std::endl; + f.light_source = LIGHT_MAX; + } f.damage_per_second = getintfield_default(L, index, "damage_per_second", f.damage_per_second); diff --git a/src/voxelalgorithms.cpp b/src/voxelalgorithms.cpp index 55f0d1c98..93cc33acc 100644 --- a/src/voxelalgorithms.cpp +++ b/src/voxelalgorithms.cpp @@ -264,6 +264,7 @@ struct LightQueue { const mapblock_v3 &block_pos, MapBlock *block, direction source_dir) { + assert(light <= LIGHT_SUN); lights[light].push_back( ChangingLight(rel_pos, block_pos, block, source_dir)); } |