aboutsummaryrefslogtreecommitdiff
path: root/scripts/msgpack-gen.lua
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-07-07 11:51:07 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-07-07 12:18:39 -0300
commit745928ef6bf48f0dec5af376f7b376570d734589 (patch)
treea60214e8798225d74ab9810ab3372a1db5c4854c /scripts/msgpack-gen.lua
parent67c5684e23ab7dc012979a058e6820fb7a6bc9ce (diff)
downloadrneovim-745928ef6bf48f0dec5af376f7b376570d734589.tar.gz
rneovim-745928ef6bf48f0dec5af376f7b376570d734589.tar.bz2
rneovim-745928ef6bf48f0dec5af376f7b376570d734589.zip
dispatch function generator: Fix bug in validation/initialization
- Initialize variables before validating argument count to remove possibility of freeing uninitialized pointers - Set the error when the argument count validation fails
Diffstat (limited to 'scripts/msgpack-gen.lua')
-rw-r--r--scripts/msgpack-gen.lua11
1 files changed, 6 insertions, 5 deletions
diff --git a/scripts/msgpack-gen.lua b/scripts/msgpack-gen.lua
index 3d924fb239..d37a85abe8 100644
--- a/scripts/msgpack-gen.lua
+++ b/scripts/msgpack-gen.lua
@@ -132,11 +132,6 @@ for i = 1, #api.functions do
output:write('static Object handle_'..fn.name..'(uint64_t channel_id, msgpack_object *req, Error *error)')
output:write('\n{')
- output:write('\n if (req->via.array.ptr[3].via.array.size != '..#fn.parameters..') {')
- output:write('\n snprintf(error->msg, sizeof(error->msg), "Wrong number of arguments: expecting '..#fn.parameters..' but got %u", req->via.array.ptr[3].via.array.size);')
- output:write('\n goto cleanup;')
- output:write('\n }\n')
-
-- Declare/initialize variables that will hold converted arguments
for j = 1, #fn.parameters do
local param = fn.parameters[j]
@@ -144,6 +139,12 @@ for i = 1, #api.functions do
output:write('\n '..param[1]..' '..converted..' msgpack_rpc_init_'..string.lower(param[1])..';')
end
output:write('\n')
+ output:write('\n if (req->via.array.ptr[3].via.array.size != '..#fn.parameters..') {')
+ output:write('\n snprintf(error->msg, sizeof(error->msg), "Wrong number of arguments: expecting '..#fn.parameters..' but got %u", req->via.array.ptr[3].via.array.size);')
+ output:write('\n error->set = true;')
+ output:write('\n goto cleanup;')
+ output:write('\n }\n')
+
-- Validation/conversion for each argument
for j = 1, #fn.parameters do
local converted, convert_arg, param, arg