mirror of
https://github.com/neovim/neovim.git
synced 2025-10-08 10:56:31 +00:00
fix(extmarks): don't leak memory on error (#22507)
This commit is contained in:
@@ -809,8 +809,7 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, Integer line, Integer
|
||||
return (Integer)id;
|
||||
|
||||
error:
|
||||
clear_virttext(&decor.virt_text);
|
||||
xfree(decor.sign_text);
|
||||
decor_clear(&decor);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -112,15 +112,20 @@ void decor_remove(buf_T *buf, int row, int row2, Decoration *decor)
|
||||
decor_free(decor);
|
||||
}
|
||||
|
||||
void decor_clear(Decoration *decor)
|
||||
{
|
||||
clear_virttext(&decor->virt_text);
|
||||
for (size_t i = 0; i < kv_size(decor->virt_lines); i++) {
|
||||
clear_virttext(&kv_A(decor->virt_lines, i).line);
|
||||
}
|
||||
kv_destroy(decor->virt_lines);
|
||||
xfree(decor->sign_text);
|
||||
}
|
||||
|
||||
void decor_free(Decoration *decor)
|
||||
{
|
||||
if (decor) {
|
||||
clear_virttext(&decor->virt_text);
|
||||
for (size_t i = 0; i < kv_size(decor->virt_lines); i++) {
|
||||
clear_virttext(&kv_A(decor->virt_lines, i).line);
|
||||
}
|
||||
kv_destroy(decor->virt_lines);
|
||||
xfree(decor->sign_text);
|
||||
decor_clear(decor);
|
||||
xfree(decor);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user