aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-11-11 13:10:26 +0800
committerGitHub <noreply@github.com>2023-11-11 13:10:26 +0800
commitfdaf6bc5573f578d100321dfc084d513884fd73a (patch)
treee6139f8cf27e8bf40bf2d590e6b27a3d82e56612
parente9b9a86cd5a555943b87f0ba40c4527561c3c124 (diff)
downloadrneovim-fdaf6bc5573f578d100321dfc084d513884fd73a.tar.gz
rneovim-fdaf6bc5573f578d100321dfc084d513884fd73a.tar.bz2
rneovim-fdaf6bc5573f578d100321dfc084d513884fd73a.zip
fix(context): don't leak memory on multiple invalid objects (#25979)
-rw-r--r--src/nvim/context.c2
-rw-r--r--test/functional/api/vim_spec.lua2
-rw-r--r--test/functional/vimscript/ctx_functions_spec.lua2
3 files changed, 3 insertions, 3 deletions
diff --git a/src/nvim/context.c b/src/nvim/context.c
index f7ed800aa7..acf793c39a 100644
--- a/src/nvim/context.c
+++ b/src/nvim/context.c
@@ -380,7 +380,7 @@ int ctx_from_dict(Dictionary dict, Context *ctx, Error *err)
assert(ctx != NULL);
int types = 0;
- for (size_t i = 0; i < dict.size; i++) {
+ for (size_t i = 0; i < dict.size && !ERROR_SET(err); i++) {
KeyValuePair item = dict.items[i];
if (item.value.type != kObjectTypeArray) {
continue;
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua
index bc7e747916..8bbadda9b0 100644
--- a/test/functional/api/vim_spec.lua
+++ b/test/functional/api/vim_spec.lua
@@ -1982,7 +1982,7 @@ describe('API', function()
it('errors when context dictionary is invalid', function()
eq('E474: Failed to convert list to msgpack string buffer',
- pcall_err(nvim, 'load_context', { regs = { {} } }))
+ pcall_err(nvim, 'load_context', { regs = { {} }, jumps = { {} } }))
eq("Empty dictionary keys aren't allowed",
pcall_err(nvim, 'load_context', { regs = { { [''] = '' } } }))
end)
diff --git a/test/functional/vimscript/ctx_functions_spec.lua b/test/functional/vimscript/ctx_functions_spec.lua
index 66a8ec3550..17607f0794 100644
--- a/test/functional/vimscript/ctx_functions_spec.lua
+++ b/test/functional/vimscript/ctx_functions_spec.lua
@@ -378,7 +378,7 @@ describe('context functions', function()
it('errors when context dictionary is invalid', function()
call('ctxpush')
eq('Vim:E474: Failed to convert list to msgpack string buffer',
- pcall_err(call, 'ctxset', { regs = { {} } }))
+ pcall_err(call, 'ctxset', { regs = { {} }, jumps = { {} } }))
end)
it('sets context dictionary at index in context stack', function()