From 5a2431a9bd9a019a47cd279ac988435b075cdabe Mon Sep 17 00:00:00 2001
From: Auke Kok <sofar@foo-projects.org>
Date: Tue, 6 Dec 2016 22:08:16 -0800
Subject: Simple decorations: Fix range check for deco->deco_param2

Allow any int value, and properly range check it before casting.
---
 src/script/lua_api/l_mapgen.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index cefea3da9..281f68e46 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -972,10 +972,10 @@ int ModApiMapgen::l_register_decoration(lua_State *L)
 bool read_deco_simple(lua_State *L, DecoSimple *deco)
 {
 	int index = 1;
+	int param2;
 
 	deco->deco_height     = getintfield_default(L, index, "height", 1);
 	deco->deco_height_max = getintfield_default(L, index, "height_max", 0);
-	deco->deco_param2     = getintfield_default(L, index, "param2", 0);
 
 	if (deco->deco_height <= 0) {
 		errorstream << "register_decoration: simple decoration height"
@@ -991,11 +991,13 @@ bool read_deco_simple(lua_State *L, DecoSimple *deco)
 		return false;
 	}
 
-	if ((deco->deco_param2 < 0) || (deco->deco_param2 > 255)) {
+	param2 = getintfield_default(L, index, "param2", 0);
+	if ((param2 < 0) || (param2 > 255)) {
 		errorstream << "register_decoration: param2 out of bounds (0-255)"
 			<< std::endl;
 		return false;
 	}
+	deco->deco_param2 = (u8)param2;
 
 	return true;
 }
-- 
cgit v1.2.3