diff options
| author | zeertzjq <zeertzjq@outlook.com> | 2023-11-11 10:21:14 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-11 10:21:14 +0800 |
| commit | e9b9a86cd5a555943b87f0ba40c4527561c3c124 (patch) | |
| tree | b1f2aef3e5e68053a8d2f08206b2c61083e6f6c1 /src/nvim/api | |
| parent | d1b2a5cf5fa583b556457d34a46ce7b940913a66 (diff) | |
| download | rneovim-e9b9a86cd5a555943b87f0ba40c4527561c3c124.tar.gz rneovim-e9b9a86cd5a555943b87f0ba40c4527561c3c124.tar.bz2 rneovim-e9b9a86cd5a555943b87f0ba40c4527561c3c124.zip | |
fix(context): don't crash on invalid arg to nvim_get_context (#25977)
Note: The crash happens in the second test case when using uninitialized
memory, and therefore doesn't happen with ASAN.
Diffstat (limited to 'src/nvim/api')
| -rw-r--r-- | src/nvim/api/private/converter.c | 4 | ||||
| -rw-r--r-- | src/nvim/api/vim.c | 6 |
2 files changed, 6 insertions, 4 deletions
diff --git a/src/nvim/api/private/converter.c b/src/nvim/api/private/converter.c index 10152cb3c8..d9832abd76 100644 --- a/src/nvim/api/private/converter.c +++ b/src/nvim/api/private/converter.c @@ -261,7 +261,9 @@ Object vim_to_object(typval_T *obj) /// @param obj Object to convert from. /// @param tv Conversion result is placed here. On failure member v_type is /// set to VAR_UNKNOWN (no allocation was made for this variable). -/// returns true if conversion is successful, otherwise false. +/// @param err Error object. +/// +/// @returns true if conversion is successful, otherwise false. bool object_to_vim(Object obj, typval_T *tv, Error *err) { tv->v_type = VAR_UNKNOWN; diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index c3c619e206..8446f5b383 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -1402,7 +1402,7 @@ Dictionary nvim_get_context(Dict(context) *opts, Error *err) /// Sets the current editor state from the given |context| map. /// /// @param dict |Context| map. -Object nvim_load_context(Dictionary dict) +Object nvim_load_context(Dictionary dict, Error *err) FUNC_API_SINCE(6) { Context ctx = CONTEXT_INIT; @@ -1410,8 +1410,8 @@ Object nvim_load_context(Dictionary dict) int save_did_emsg = did_emsg; did_emsg = false; - ctx_from_dict(dict, &ctx); - if (!did_emsg) { + ctx_from_dict(dict, &ctx, err); + if (!ERROR_SET(err)) { ctx_restore(&ctx, kCtxAll); } |