diff options
| -rw-r--r-- | src/nvim/msgpack_rpc/helpers.c | 7 | ||||
| -rw-r--r-- | test/functional/api/server_requests_spec.lua | 20 | 
2 files changed, 23 insertions, 4 deletions
| diff --git a/src/nvim/msgpack_rpc/helpers.c b/src/nvim/msgpack_rpc/helpers.c index a119c4653a..5ef81721d4 100644 --- a/src/nvim/msgpack_rpc/helpers.c +++ b/src/nvim/msgpack_rpc/helpers.c @@ -94,10 +94,9 @@ bool msgpack_rpc_to_string(msgpack_object *obj, String *arg)    FUNC_ATTR_NONNULL_ALL  {    if (obj->type == MSGPACK_OBJECT_BIN || obj->type == MSGPACK_OBJECT_STR) { -    if (obj->via.bin.ptr == NULL) { -      return false; -    } -    arg->data = xmemdupz(obj->via.bin.ptr, obj->via.bin.size); +    arg->data = obj->via.bin.ptr != NULL +                    ? xmemdupz(obj->via.bin.ptr, obj->via.bin.size) +                    : NULL;      arg->size = obj->via.bin.size;      return true;    } diff --git a/test/functional/api/server_requests_spec.lua b/test/functional/api/server_requests_spec.lua index a3ac864f79..16a4423535 100644 --- a/test/functional/api/server_requests_spec.lua +++ b/test/functional/api/server_requests_spec.lua @@ -32,6 +32,26 @@ describe('server -> client', function()      end)    end) +  describe('empty string handling in arrays', function() +    -- Because the msgpack encoding for an empty string was interpreted as an +    -- error, msgpack arrays with an empty string looked like +    -- [..., '', 0, ..., 0] after the conversion, regardless of the array +    -- elements following the empty string. +    it('works', function() +      local function on_setup() +        eq({1, 2, '', 3, 'asdf'}, eval('rpcrequest('..cid..', "nstring")')) +        stop() +      end + +      local function on_request(method, args) +        -- No need to evaluate the args, we are only interested in +        -- a response that contains an array with an empty string. +        return {1, 2, '', 3, 'asdf'} +      end +      run(on_request, nil, on_setup) +    end) +  end) +    describe('recursive call', function()      it('works', function()        local function on_setup() | 
