diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-02-22 09:13:07 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-22 09:13:07 +0800 |
commit | 711a2f5ff67d245ee9a1322f9554329537977989 (patch) | |
tree | 3f7404c004fc392520e892b50653345e82bb0049 | |
parent | 2137edbd4f15781a3a17091d38688a8ecbc02988 (diff) | |
download | rneovim-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.c | 12 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 7 |
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 = [[ |