aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-07-21 08:21:46 +0800
committerGitHub <noreply@github.com>2023-07-21 08:21:46 +0800
commit60d320dea3fe7b7d666d5a18ec8b94178c31acf4 (patch)
tree01f87e4c5d2b0345355ae18fe489019f889c73c5
parent63b3408551561127f7845470eb51404bcd6f547b (diff)
downloadrneovim-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.c9
-rw-r--r--src/nvim/message.c4
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));
}