From c07c642ab091b7250ecdc5defee1fec26ba73dc4 Mon Sep 17 00:00:00 2001
From: Loïc Blot <nerzhul@users.noreply.github.com>
Date: Mon, 8 May 2017 20:43:03 +0200
Subject: read_schematic_replacements: ensure fields are strings (#5726)

* read_schematic_replacements: ensure fields are strings

add a type check before reading strings on read_schematic_replacements deserializer

* throw LuaError instead of asserting the whole client
---
 src/script/lua_api/l_mapgen.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'src')

diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp
index 6d3171df9..32eb7af84 100644
--- a/src/script/lua_api/l_mapgen.cpp
+++ b/src/script/lua_api/l_mapgen.cpp
@@ -325,14 +325,22 @@ void read_schematic_replacements(lua_State *L, int index, StringMap *replace_nam
 
 		if (lua_istable(L, -1)) { // Old {{"x", "y"}, ...} format
 			lua_rawgeti(L, -1, 1);
+			if (!lua_isstring(L, -1))
+				throw LuaError("schematics: replace_from field is not a string");
 			replace_from = lua_tostring(L, -1);
 			lua_pop(L, 1);
 
 			lua_rawgeti(L, -1, 2);
+			if (!lua_isstring(L, -1))
+				throw LuaError("schematics: replace_to field is not a string");
 			replace_to = lua_tostring(L, -1);
 			lua_pop(L, 1);
 		} else { // New {x = "y", ...} format
+			if (!lua_isstring(L, -2))
+				throw LuaError("schematics: replace_from field is not a string");
 			replace_from = lua_tostring(L, -2);
+			if (!lua_isstring(L, -1))
+				throw LuaError("schematics: replace_to field is not a string");
 			replace_to = lua_tostring(L, -1);
 		}
 
-- 
cgit v1.2.3