diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-07-21 08:21:46 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-21 08:21:46 +0800 |
commit | 60d320dea3fe7b7d666d5a18ec8b94178c31acf4 (patch) | |
tree | 01f87e4c5d2b0345355ae18fe489019f889c73c5 | |
parent | 63b3408551561127f7845470eb51404bcd6f547b (diff) | |
download | rneovim-60d320dea3fe7b7d666d5a18ec8b94178c31acf4.tar.gz rneovim-60d320dea3fe7b7d666d5a18ec8b94178c31acf4.tar.bz2 rneovim-60d320dea3fe7b7d666d5a18ec8b94178c31acf4.zip |
fix(decoration_provider): don't leak memory on error (#24410)
-rw-r--r-- | src/nvim/decoration_provider.c | 9 | ||||
-rw-r--r-- | src/nvim/message.c | 4 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/nvim/decoration_provider.c b/src/nvim/decoration_provider.c index 5f2e2735a9..8e5809c4e0 100644 --- a/src/nvim/decoration_provider.c +++ b/src/nvim/decoration_provider.c @@ -26,11 +26,11 @@ static kvec_t(DecorProvider) decor_providers = KV_INITIAL_VALUE; LUA_NOREF, LUA_NOREF, LUA_NOREF, \ LUA_NOREF, -1, false, false, 0 } -static void decor_provider_error(DecorProvider *provider, const char *name, Error err) +static void decor_provider_error(DecorProvider *provider, const char *name, const char *msg) { const char *ns_name = describe_ns(provider->ns_id); - ELOG("error in provider %s.%s: %s", ns_name, name, err.msg); - msg_schedule_semsg_multiline("Error in decoration provider %s.%s:\n%s", ns_name, name, err.msg); + ELOG("error in provider %s.%s: %s", ns_name, name, msg); + msg_schedule_semsg_multiline("Error in decoration provider %s.%s:\n%s", ns_name, name, msg); } static bool decor_provider_invoke(DecorProvider *provider, const char *name, LuaRef ref, Array args, @@ -51,7 +51,7 @@ static bool decor_provider_invoke(DecorProvider *provider, const char *name, Lua } if (ERROR_SET(&err)) { - decor_provider_error(provider, name, err); + decor_provider_error(provider, name, err.msg); provider->error_count++; if (provider->error_count >= DP_MAX_ERROR) { @@ -59,6 +59,7 @@ static bool decor_provider_invoke(DecorProvider *provider, const char *name, Lua } } + api_clear_error(&err); api_free_object(ret); return false; } diff --git a/src/nvim/message.c b/src/nvim/message.c index 1f6790225c..81760dd017 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -896,10 +896,10 @@ void msg_schedule_semsg_multiline(const char *const fmt, ...) { va_list ap; va_start(ap, fmt); - vim_vsnprintf((char *)IObuff, IOSIZE, fmt, ap); + vim_vsnprintf(IObuff, IOSIZE, fmt, ap); va_end(ap); - char *s = xstrdup((char *)IObuff); + char *s = xstrdup(IObuff); loop_schedule_deferred(&main_loop, event_create(msg_semsg_multiline_event, 1, s)); } |