mirror of
https://github.com/neovim/neovim.git
synced 2025-12-17 11:55:34 +00:00
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
This commit is contained in:
@@ -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('static Object handle_'..fn.name..'(uint64_t channel_id, msgpack_object *req, Error *error)')
|
||||||
output:write('\n{')
|
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
|
-- Declare/initialize variables that will hold converted arguments
|
||||||
for j = 1, #fn.parameters do
|
for j = 1, #fn.parameters do
|
||||||
local param = fn.parameters[j]
|
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])..';')
|
output:write('\n '..param[1]..' '..converted..' msgpack_rpc_init_'..string.lower(param[1])..';')
|
||||||
end
|
end
|
||||||
output:write('\n')
|
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
|
-- Validation/conversion for each argument
|
||||||
for j = 1, #fn.parameters do
|
for j = 1, #fn.parameters do
|
||||||
local converted, convert_arg, param, arg
|
local converted, convert_arg, param, arg
|
||||||
|
|||||||
Reference in New Issue
Block a user