mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #14500 from jamessan/coverity-fixes
Various Coverity fixes
This commit is contained in:
commit
21035cff9f
@ -383,8 +383,9 @@ void decor_add_ephemeral(int start_row, int start_col, int end_row, int end_col,
|
|||||||
|
|
||||||
DecorProvider *get_decor_provider(NS ns_id, bool force)
|
DecorProvider *get_decor_provider(NS ns_id, bool force)
|
||||||
{
|
{
|
||||||
ssize_t i;
|
size_t i;
|
||||||
for (i = 0; i < (ssize_t)kv_size(decor_providers); i++) {
|
size_t len = kv_size(decor_providers);
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
DecorProvider *item = &kv_A(decor_providers, i);
|
DecorProvider *item = &kv_A(decor_providers, i);
|
||||||
if (item->ns_id == ns_id) {
|
if (item->ns_id == ns_id) {
|
||||||
return item;
|
return item;
|
||||||
@ -397,12 +398,16 @@ DecorProvider *get_decor_provider(NS ns_id, bool force)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (ssize_t j = (ssize_t)kv_size(decor_providers)-1; j >= i; j++) {
|
// Adding a new provider, so allocate room in the vector
|
||||||
// allocates if needed:
|
(void)kv_a(decor_providers, len);
|
||||||
(void)kv_a(decor_providers, (size_t)j+1);
|
if (i < len) {
|
||||||
kv_A(decor_providers, (size_t)j+1) = kv_A(decor_providers, j);
|
// New ns_id needs to be inserted between existing providers to maintain
|
||||||
|
// ordering, so shift other providers with larger ns_id
|
||||||
|
memmove(&kv_A(decor_providers, i + 1),
|
||||||
|
&kv_A(decor_providers, i),
|
||||||
|
(len - i) * sizeof(kv_a(decor_providers, i)));
|
||||||
}
|
}
|
||||||
DecorProvider *item = &kv_a(decor_providers, (size_t)i);
|
DecorProvider *item = &kv_a(decor_providers, i);
|
||||||
*item = DECORATION_PROVIDER_INIT(ns_id);
|
*item = DECORATION_PROVIDER_INIT(ns_id);
|
||||||
|
|
||||||
return item;
|
return item;
|
||||||
|
@ -537,7 +537,7 @@ static char_u *fname_trans_sid(const char_u *const name,
|
|||||||
if (current_sctx.sc_sid <= 0) {
|
if (current_sctx.sc_sid <= 0) {
|
||||||
*error = ERROR_SCRIPT;
|
*error = ERROR_SCRIPT;
|
||||||
} else {
|
} else {
|
||||||
snprintf((char *)fname_buf + 3, FLEN_FIXED + 1, "%" PRId64 "_",
|
snprintf((char *)fname_buf + i, FLEN_FIXED + 1 - i, "%" PRId64 "_",
|
||||||
(int64_t)current_sctx.sc_sid);
|
(int64_t)current_sctx.sc_sid);
|
||||||
i = (int)STRLEN(fname_buf);
|
i = (int)STRLEN(fname_buf);
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ static int msg_grid_scroll_discount = 0;
|
|||||||
|
|
||||||
static void ui_ext_msg_set_pos(int row, bool scrolled)
|
static void ui_ext_msg_set_pos(int row, bool scrolled)
|
||||||
{
|
{
|
||||||
char buf[MAX_MCO];
|
char buf[MAX_MCO + 1];
|
||||||
size_t size = utf_char2bytes(curwin->w_p_fcs_chars.msgsep, (char_u *)buf);
|
size_t size = utf_char2bytes(curwin->w_p_fcs_chars.msgsep, (char_u *)buf);
|
||||||
buf[size] = '\0';
|
buf[size] = '\0';
|
||||||
ui_call_msg_set_pos(msg_grid.handle, row, scrolled,
|
ui_call_msg_set_pos(msg_grid.handle, row, scrolled,
|
||||||
|
@ -471,8 +471,6 @@ FILE *os_fopen(const char *path, const char *flags)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Per open(2) manpage.
|
|
||||||
assert((iflags|O_RDONLY) || (iflags|O_WRONLY) || (iflags|O_RDWR));
|
|
||||||
// Per fopen(3) manpage: default to 0666, it will be umask-adjusted.
|
// Per fopen(3) manpage: default to 0666, it will be umask-adjusted.
|
||||||
int fd = os_open(path, iflags, 0666);
|
int fd = os_open(path, iflags, 0666);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
typedef struct pty_process {
|
typedef struct pty_process {
|
||||||
Process process;
|
Process process;
|
||||||
char *term_name;
|
|
||||||
uint16_t width, height;
|
uint16_t width, height;
|
||||||
struct winsize winsize;
|
struct winsize winsize;
|
||||||
int tty_fd;
|
int tty_fd;
|
||||||
|
@ -15,7 +15,6 @@ typedef enum {
|
|||||||
|
|
||||||
typedef struct pty_process {
|
typedef struct pty_process {
|
||||||
Process process;
|
Process process;
|
||||||
char *term_name;
|
|
||||||
uint16_t width, height;
|
uint16_t width, height;
|
||||||
union {
|
union {
|
||||||
winpty_t *winpty;
|
winpty_t *winpty;
|
||||||
|
@ -2199,7 +2199,7 @@ bool one_nonfloat(void) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
|
|||||||
/// always false for a floating window
|
/// always false for a floating window
|
||||||
bool last_nonfloat(win_T *wp) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
|
bool last_nonfloat(win_T *wp) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
|
||||||
{
|
{
|
||||||
return firstwin == wp && !(wp->w_next && !wp->w_floating);
|
return wp != NULL && firstwin == wp && !(wp->w_next && !wp->w_floating);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Close the possibly last window in a tab page.
|
/// Close the possibly last window in a tab page.
|
||||||
|
@ -66,6 +66,18 @@ describe('decorations providers', function()
|
|||||||
expect_events(expected, actual, "beam trace")
|
expect_events(expected, actual, "beam trace")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it('does not OOM when inserting, rather than appending, to the decoration provider vector', function()
|
||||||
|
-- Add a dummy decoration provider with a larger ns id than what setup_provider() creates.
|
||||||
|
-- This forces get_decor_provider() to insert into the providers vector,
|
||||||
|
-- rather than append, which used to spin in an infinite loop allocating
|
||||||
|
-- memory until nvim crashed/was killed.
|
||||||
|
setup_provider([[
|
||||||
|
local ns2 = a.nvim_create_namespace "ns2"
|
||||||
|
a.nvim_set_decoration_provider(ns2, {})
|
||||||
|
]])
|
||||||
|
helpers.assert_alive()
|
||||||
|
end)
|
||||||
|
|
||||||
it('leave a trace', function()
|
it('leave a trace', function()
|
||||||
insert(mulholland)
|
insert(mulholland)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user