mirror of
https://github.com/Uberi/Minetest-WorldEdit.git
synced 2024-11-13 14:10:18 +01:00
Harden deserialize workaround against unexpected input
Otherwise it will stop working entirely soon when the serialization inside Minetest is reworked. This allows it to work at least in the cases where the original bug (LuaJIT register limit) doesn't apply.
This commit is contained in:
parent
c223ca4cec
commit
abc9efeeb8
|
@ -114,12 +114,15 @@ function worldedit.serialize(pos1, pos2)
|
|||
return LATEST_SERIALIZATION_HEADER .. result, count
|
||||
end
|
||||
|
||||
-- Contains code based on [table.save/table.load](http://lua-users.org/wiki/SaveTableToFile)
|
||||
-- by ChillCode, available under the MIT license.
|
||||
local function deserialize_workaround(content)
|
||||
local nodes
|
||||
if not minetest.global_exists("jit") then
|
||||
nodes = minetest.deserialize(content, true)
|
||||
elseif not content:match("^%s*return%s*{") then
|
||||
-- The data doesn't look like we expect it to so we can't apply the workaround.
|
||||
-- hope for the best
|
||||
minetest.log("warning", "WorldEdit: deserializing data but can't apply LuaJIT workaround")
|
||||
nodes = minetest.deserialize(content, true)
|
||||
else
|
||||
-- XXX: This is a filthy hack that works surprisingly well
|
||||
-- in LuaJIT, `minetest.deserialize` will fail due to the register limit
|
||||
|
@ -130,7 +133,7 @@ local function deserialize_workaround(content)
|
|||
local startpos, startpos1 = 1, 1
|
||||
local endpos
|
||||
while true do -- go through each individual node entry (except the last)
|
||||
startpos, endpos = escaped:find("},%s*{", startpos)
|
||||
startpos, endpos = escaped:find("}%s*,%s*{", startpos)
|
||||
if not startpos then
|
||||
break
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user