From 2fe3bf5a18eb9aa9f38654b3c0a0729c42408cd6 Mon Sep 17 00:00:00 2001
From: juhdanad <juhdanad@gmail.com>
Date: Mon, 28 Nov 2016 09:43:33 +0100
Subject: [PATCH] Limit light_source in the engine (#4814)

Since light_source>15 causes crash, it must be limited.
---
 src/nodedef.cpp                 | 2 ++
 src/script/common/c_content.cpp | 6 ++++++
 src/voxelalgorithms.cpp         | 1 +
 3 files changed, 9 insertions(+)

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));
 	}
-- 
GitLab