mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
free_buf_options(): free buf_T.b_kmap_ga
ASAN log: ==23244==ERROR: LeakSanitizer: detected memory leaks Direct leak of 3348 byte(s) in 228 object(s) allocated from: 0 0x4ee3d3 in malloc /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:67:3 1 0xf4e681 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:87:15 2 0xf4e8a9 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:121:15 3 0xf4ee68 in xmallocz /home/travis/build/neovim/neovim/src/nvim/memory.c:196:15 4 0x170e3ee in vim_strnsave /home/travis/build/neovim/neovim/src/nvim/strings.c:70:28 5 0x73b2ff in ex_loadkeymap /home/travis/build/neovim/neovim/src/nvim/digraph.c:1814:16 6 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5 7 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20 8 0xaee67d in do_source /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2970:3 9 0xae82ae in source_callback /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2326:9 10 0xae7adf in do_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2404:15 11 0xae7f48 in do_in_path_and_pp /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2448:12 12 0xae8281 in source_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2496:10 13 0xae610c in source_runtime /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2490:10 14 0x739887 in keymap_init /home/travis/build/neovim/neovim/src/nvim/digraph.c:1755:9 15 0x11d423e in did_set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2678:16 16 0x11eecc4 in set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2409:27 17 0x119852f in set_option_value /home/travis/build/neovim/neovim/src/nvim/option.c:4849:14 18 0x11bccac in set_bool_option /home/travis/build/neovim/neovim/src/nvim/option.c:3984:7 19 0x11a9d50 in do_set /home/travis/build/neovim/neovim/src/nvim/option.c:1424:30 20 0xb8caf7 in ex_set /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:9764:9 21 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5 22 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20 23 0x818b42 in call_user_func /home/travis/build/neovim/neovim/src/nvim/eval.c:21315:3 24 0x7e41bb in call_func /home/travis/build/neovim/neovim/src/nvim/eval.c:6358:11 25 0x7f8fb8 in get_func_tv /home/travis/build/neovim/neovim/src/nvim/eval.c:6120:11 26 0x7f1ba1 in ex_call /home/travis/build/neovim/neovim/src/nvim/eval.c:2735:9 27 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5 28 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20 29 0x837ef1 in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19463:7 Direct leak of 456 byte(s) in 228 object(s) allocated from: 0 0x4ee3d3 in malloc /local/mnt/workspace/tmp/ubuntu_rel/llvm/utils/release/final/llvm.src/projects/compiler-rt/lib/asan/asan_malloc_linux.cc:67:3 1 0xf4e681 in try_malloc /home/travis/build/neovim/neovim/src/nvim/memory.c:87:15 2 0xf4e8a9 in xmalloc /home/travis/build/neovim/neovim/src/nvim/memory.c:121:15 3 0xf4ee68 in xmallocz /home/travis/build/neovim/neovim/src/nvim/memory.c:196:15 4 0x170e3ee in vim_strnsave /home/travis/build/neovim/neovim/src/nvim/strings.c:70:28 5 0x73b18f in ex_loadkeymap /home/travis/build/neovim/neovim/src/nvim/digraph.c:1811:18 6 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5 7 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20 8 0xaee67d in do_source /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2970:3 9 0xae82ae in source_callback /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2326:9 10 0xae7adf in do_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2404:15 11 0xae7f48 in do_in_path_and_pp /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2448:12 12 0xae8281 in source_in_path /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2496:10 13 0xae610c in source_runtime /home/travis/build/neovim/neovim/src/nvim/ex_cmds2.c:2490:10 14 0x739887 in keymap_init /home/travis/build/neovim/neovim/src/nvim/digraph.c:1755:9 15 0x11d423e in did_set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2678:16 16 0x11eecc4 in set_string_option /home/travis/build/neovim/neovim/src/nvim/option.c:2409:27 17 0x119852f in set_option_value /home/travis/build/neovim/neovim/src/nvim/option.c:4849:14 18 0x11bccac in set_bool_option /home/travis/build/neovim/neovim/src/nvim/option.c:3984:7 19 0x11a9d50 in do_set /home/travis/build/neovim/neovim/src/nvim/option.c:1424:30 20 0xb8caf7 in ex_set /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:9764:9 21 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5 22 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20 23 0x818b42 in call_user_func /home/travis/build/neovim/neovim/src/nvim/eval.c:21315:3 24 0x7e41bb in call_func /home/travis/build/neovim/neovim/src/nvim/eval.c:6358:11 25 0x7f8fb8 in get_func_tv /home/travis/build/neovim/neovim/src/nvim/eval.c:6120:11 26 0x7f1ba1 in ex_call /home/travis/build/neovim/neovim/src/nvim/eval.c:2735:9 27 0xb1ef4c in do_one_cmd /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:2242:5 28 0xb011b3 in do_cmdline /home/travis/build/neovim/neovim/src/nvim/ex_docmd.c:609:20 29 0x837ef1 in ex_execute /home/travis/build/neovim/neovim/src/nvim/eval.c:19463:7 SUMMARY: AddressSanitizer: 3804 byte(s) leaked in 456 allocation(s). Failed: E /tests/oldtests|logs :: Runtime errors detected.
This commit is contained in:
parent
b00fd49640
commit
5a96a9eba2
@ -1775,6 +1775,7 @@ void free_buf_options(buf_T *buf, int free_p_ff)
|
||||
clear_string_option(&buf->b_p_flp);
|
||||
clear_string_option(&buf->b_p_isk);
|
||||
clear_string_option(&buf->b_p_keymap);
|
||||
keymap_ga_clear(&buf->b_kmap_ga);
|
||||
ga_clear(&buf->b_kmap_ga);
|
||||
clear_string_option(&buf->b_p_com);
|
||||
clear_string_option(&buf->b_p_cms);
|
||||
|
@ -1841,6 +1841,16 @@ void ex_loadkeymap(exarg_T *eap)
|
||||
status_redraw_curbuf();
|
||||
}
|
||||
|
||||
/// Frees the buf_T.b_kmap_ga field of a buffer.
|
||||
void keymap_ga_clear(garray_T *kmap_ga)
|
||||
{
|
||||
kmap_T *kp = (kmap_T *)kmap_ga->ga_data;
|
||||
for (int i = 0; i < kmap_ga->ga_len; i++) {
|
||||
xfree(kp[i].from);
|
||||
xfree(kp[i].to);
|
||||
}
|
||||
}
|
||||
|
||||
/// Stop using 'keymap'.
|
||||
static void keymap_unload(void)
|
||||
{
|
||||
@ -1858,12 +1868,11 @@ static void keymap_unload(void)
|
||||
// clear the ":lmap"s
|
||||
kp = (kmap_T *)curbuf->b_kmap_ga.ga_data;
|
||||
|
||||
for (int i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) {
|
||||
for (int i = 0; i < curbuf->b_kmap_ga.ga_len; i++) {
|
||||
vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s", kp[i].from);
|
||||
(void)do_map(1, buf, LANGMAP, FALSE);
|
||||
xfree(kp[i].from);
|
||||
xfree(kp[i].to);
|
||||
(void)do_map(1, buf, LANGMAP, false);
|
||||
}
|
||||
keymap_ga_clear(&curbuf->b_kmap_ga);
|
||||
|
||||
p_cpo = save_cpo;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user