From 7b42a7a5ee82b671d9f5e9132d9799db5558adb9 Mon Sep 17 00:00:00 2001 From: grilledham Date: Sun, 25 Nov 2018 19:18:51 +0000 Subject: [PATCH] updates --- control.lua | 15 +++++++++++++++ server.lua | 11 +++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/control.lua b/control.lua index cdc85681..329455c1 100644 --- a/control.lua +++ b/control.lua @@ -78,3 +78,18 @@ Event.add( print(serpent.block(tbl)) end ) + +local Token = require('utils.global_token') +local data_callback = Token.register( + function(data) + game.print(serpent.line(data)) + end +) + +function get_data(data_set, key) + Server.try_get_data(data_set, key, data_callback) +end + +function get_all_data(data_set, key) + Server.try_get_all_data(data_set, data_callback) +end diff --git a/server.lua b/server.lua index beab6e51..3dc979a1 100644 --- a/server.lua +++ b/server.lua @@ -134,6 +134,9 @@ function Public.set_data(data_set, key, value) if vt == 'nil' then message = table.concat({data_set_tag, '{data_set:"', data_set, '",key:"', key, '"}'}) elseif vt == 'string' then + -- Excessive escaping because the data is serialized twice. + value = value:gsub('\\', '\\\\\\\\'):gsub('"', '\\\\\\"') + message = table.concat({data_set_tag, '{data_set:"', data_set, '",key:"', key, '",value:"\\"', value, '\\""}'}) elseif vt == 'number' then message = table.concat({data_set_tag, '{data_set:"', data_set, '",key:"', key, '",value:"', value, '"}'}) @@ -142,9 +145,13 @@ function Public.set_data(data_set, key, value) table.concat({data_set_tag, '{data_set:"', data_set, '",key:"', key, '",value:"', tostring(value), '"}'}) elseif vt == 'function' then error('value cannot be a function') - else + else -- table value = serpent.line(value) - value = value:gsub("'", "\\'") + + -- Less escaping than the string case as serpent provides one level of escaping. + -- Need to escape single quotes as serpent uses double quotes for strings. + value = value:gsub('\\', '\\\\'):gsub("'", "\\'") + message = table.concat({data_set_tag, '{data_set:"', data_set, '",key:"', key, "\",value:'", value, "'}"}) end