diff options
author | thetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com> | 2017-12-22 17:13:50 +0000 |
---|---|---|
committer | thetaepsilon-gamedev <thetaepsilon-gamedev@noreply.users.github.com> | 2017-12-22 17:18:31 +0000 |
commit | 57fc8c67f827a41ab1278fd0d25b2566032da61a (patch) | |
tree | 7fbf93be23e4fca48b1367928ad249fdf05d2ad3 /teleport_tube.lua | |
parent | a2e183c6f3d76e809bbc2d6b596e7e000f06ee66 (diff) |
teleport_tube.lua: fix 32-bit clamping issues on some systems for %d in string.format
Some servers running ubuntu in particular were reporting issues with teleport tubes not working.
On investigation, all tube entries were colliding as string.format("%d", ...)
was returning either -2^31 or 2^31-1 depending on system bit width,
causing hash entries to be overwritten.
This is possibly related to the use of C sprintf within lua.
Fix this by using %g instead to interpret as double without int conversion,
with a large enough number of digits such that all possible 2^48 values from
minetest.hash_node_position() can be correctly serialised.
Diffstat (limited to 'teleport_tube.lua')
-rw-r--r-- | teleport_tube.lua | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/teleport_tube.lua b/teleport_tube.lua index bb364db..9a66de2 100644 --- a/teleport_tube.lua +++ b/teleport_tube.lua @@ -4,7 +4,7 @@ local tp_tube_db = nil -- nil forces a read local tp_tube_db_version = 2.0 local function hash(pos) - return string.format("%d", minetest.hash_node_position(pos)) + return string.format("%.30g", minetest.hash_node_position(pos)) end local function save_tube_db() |