neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit dd0e9910da59bb870a95d6af9b82965eb42784d3
parent 69774e317982edbe943c7d75cb0369fc001dec39
Author: bfredl <bjorn.linse@gmail.com>
Date:   Fri,  3 Jun 2022 15:02:10 +0200

Merge pull request #18846 from bfredl/unpackfix

fix(api): some robustness issues in api_parse_enter
Diffstat:
Msrc/nvim/msgpack_rpc/unpacker.c | 15++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/nvim/msgpack_rpc/unpacker.c b/src/nvim/msgpack_rpc/unpacker.c @@ -50,15 +50,23 @@ static void api_parse_enter(mpack_parser_t *parser, mpack_node_t *node) Object *obj = parent->data[0].p; KeyValuePair *kv = &kv_A(obj->data.dictionary, parent->pos); if (!parent->key_visited) { + // TODO(bfredl): when implementing interrupt parse on error, + // stop parsing here when node is not a STR/BIN + kv->key = (String)STRING_INIT; key_location = &kv->key; - } else { - result = &kv->value; } + result = &kv->value; break; } - default: + case MPACK_TOKEN_STR: + case MPACK_TOKEN_BIN: + case MPACK_TOKEN_EXT: + assert(node->tok.type == MPACK_TOKEN_CHUNK); break; + + default: + abort(); } } else { result = &unpacker->result; @@ -99,6 +107,7 @@ static void api_parse_enter(mpack_parser_t *parser, mpack_node_t *node) break; case MPACK_TOKEN_CHUNK: + assert(parent); if (parent->tok.type == MPACK_TOKEN_STR || parent->tok.type == MPACK_TOKEN_BIN) { char *data = parent->data[0].p; memcpy(data + parent->pos,