aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-02-22 09:13:07 +0800
committerGitHub <noreply@github.com>2024-02-22 09:13:07 +0800
commit711a2f5ff67d245ee9a1322f9554329537977989 (patch)
tree3f7404c004fc392520e892b50653345e82bb0049
parent2137edbd4f15781a3a17091d38688a8ecbc02988 (diff)
downloadrneovim-711a2f5ff67d245ee9a1322f9554329537977989.tar.gz
rneovim-711a2f5ff67d245ee9a1322f9554329537977989.tar.bz2
rneovim-711a2f5ff67d245ee9a1322f9554329537977989.zip
fix(api): don't leak memory with nvim_win_get_ns (#27570)
-rw-r--r--src/nvim/api/extmark.c12
-rw-r--r--test/functional/ui/decorations_spec.lua7
2 files changed, 11 insertions, 8 deletions
diff --git a/src/nvim/api/extmark.c b/src/nvim/api/extmark.c
index 23a42798d9..5dcda42b02 100644
--- a/src/nvim/api/extmark.c
+++ b/src/nvim/api/extmark.c
@@ -1254,18 +1254,18 @@ Boolean nvim_win_add_ns(Window window, Integer ns_id, Error *err)
///
/// @param window Window handle, or 0 for current window
/// @return a list of namespaces ids
-ArrayOf(Integer) nvim_win_get_ns(Window window, Error *err)
+ArrayOf(Integer) nvim_win_get_ns(Window window, Arena *arena, Error *err)
FUNC_API_SINCE(12)
{
- Array rv = ARRAY_DICT_INIT;
-
win_T *win = find_window_by_handle(window, err);
if (!win) {
- return rv;
+ return (Array)ARRAY_DICT_INIT;
}
+
+ Array rv = arena_array(arena, set_size(&win->w_ns_set));
uint32_t i;
set_foreach(&win->w_ns_set, i, {
- ADD(rv, INTEGER_OBJ((Integer)(i)));
+ ADD_C(rv, INTEGER_OBJ((Integer)(i)));
});
return rv;
@@ -1288,7 +1288,7 @@ Boolean nvim_win_remove_ns(Window window, Integer ns_id, Error *err)
return false;
}
- set_del_uint32_t(&win->w_ns_set, (uint32_t)ns_id);
+ set_del(uint32_t, &win->w_ns_set, (uint32_t)ns_id);
changed_window_setting_win(win);
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index 6e74d83a79..b6e1a776e8 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -5792,7 +5792,8 @@ describe('decorations: window scoped', function()
end_col = 3,
})
- api.nvim_win_add_ns(0, ns)
+ eq(true, api.nvim_win_add_ns(0, ns))
+ eq({ ns }, api.nvim_win_get_ns(0))
screen:expect {
grid = [[
@@ -5803,10 +5804,12 @@ describe('decorations: window scoped', function()
command 'split'
command 'only'
+ eq({}, api.nvim_win_get_ns(0))
screen:expect(noextmarks)
- api.nvim_win_add_ns(0, ns)
+ eq(true, api.nvim_win_add_ns(0, ns))
+ eq({ ns }, api.nvim_win_get_ns(0))
screen:expect {
grid = [[