mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #18648 from jamessan/coverity-fixes
This commit is contained in:
commit
b3453ea4a6
2
.github/workflows/coverity-scan.yml
vendored
2
.github/workflows/coverity-scan.yml
vendored
@ -1,7 +1,7 @@
|
|||||||
name: Coverity
|
name: Coverity
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '10 0 * * 1' # Run every Monday at 00:10
|
- cron: '10 0 * * *' # Run every day at 00:10
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
@ -42,3 +42,72 @@ int tv_dict_add(dict_T *const d, dictitem_T *const item)
|
|||||||
{
|
{
|
||||||
__coverity_escape__(item);
|
__coverity_escape__(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *malloc(size_t size)
|
||||||
|
{
|
||||||
|
int has_mem;
|
||||||
|
if (has_mem)
|
||||||
|
return __coverity_alloc__(size);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *try_malloc(size_t size)
|
||||||
|
{
|
||||||
|
size_t allocated_size = size ? size : 1;
|
||||||
|
return malloc(allocated_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *xmalloc(size_t size)
|
||||||
|
{
|
||||||
|
void *p = malloc(size);
|
||||||
|
if (!p)
|
||||||
|
__coverity_panic__();
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void xfree(void * ptr)
|
||||||
|
{
|
||||||
|
__coverity_free__(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *xcalloc(size_t count, size_t size)
|
||||||
|
{
|
||||||
|
size_t allocated_count = count && size ? count : 1;
|
||||||
|
size_t allocated_size = count && size ? size : 1;
|
||||||
|
void *p = try_malloc(allocated_count * allocated_size);
|
||||||
|
if (!p)
|
||||||
|
__coverity_panic__();
|
||||||
|
__coverity_writeall0__(p);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *xrealloc(void *ptr, size_t size)
|
||||||
|
{
|
||||||
|
__coverity_escape__(ptr);
|
||||||
|
void * p = xmalloc(size);
|
||||||
|
__coverity_writeall__(p);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *xmallocz(size_t size)
|
||||||
|
{
|
||||||
|
void * p = malloc(size + 1);
|
||||||
|
((char*)p)[size] = 0;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void * xmemdupz(const void * data, size_t len)
|
||||||
|
{
|
||||||
|
void * p = xmallocz(len);
|
||||||
|
__coverity_writeall__(p);
|
||||||
|
((char*)p)[len] = 0;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void * xmemdup(const void *data, size_t len)
|
||||||
|
{
|
||||||
|
void * p = xmalloc(len);
|
||||||
|
__coverity_writeall__(p);
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
@ -95,27 +95,27 @@ static bool ns_initialized(uint32_t ns)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Array extmark_to_array(ExtmarkInfo extmark, bool id, bool add_dict)
|
static Array extmark_to_array(const ExtmarkInfo *extmark, bool id, bool add_dict)
|
||||||
{
|
{
|
||||||
Array rv = ARRAY_DICT_INIT;
|
Array rv = ARRAY_DICT_INIT;
|
||||||
if (id) {
|
if (id) {
|
||||||
ADD(rv, INTEGER_OBJ((Integer)extmark.mark_id));
|
ADD(rv, INTEGER_OBJ((Integer)extmark->mark_id));
|
||||||
}
|
}
|
||||||
ADD(rv, INTEGER_OBJ(extmark.row));
|
ADD(rv, INTEGER_OBJ(extmark->row));
|
||||||
ADD(rv, INTEGER_OBJ(extmark.col));
|
ADD(rv, INTEGER_OBJ(extmark->col));
|
||||||
|
|
||||||
if (add_dict) {
|
if (add_dict) {
|
||||||
Dictionary dict = ARRAY_DICT_INIT;
|
Dictionary dict = ARRAY_DICT_INIT;
|
||||||
|
|
||||||
PUT(dict, "right_gravity", BOOLEAN_OBJ(extmark.right_gravity));
|
PUT(dict, "right_gravity", BOOLEAN_OBJ(extmark->right_gravity));
|
||||||
|
|
||||||
if (extmark.end_row >= 0) {
|
if (extmark->end_row >= 0) {
|
||||||
PUT(dict, "end_row", INTEGER_OBJ(extmark.end_row));
|
PUT(dict, "end_row", INTEGER_OBJ(extmark->end_row));
|
||||||
PUT(dict, "end_col", INTEGER_OBJ(extmark.end_col));
|
PUT(dict, "end_col", INTEGER_OBJ(extmark->end_col));
|
||||||
PUT(dict, "end_right_gravity", BOOLEAN_OBJ(extmark.end_right_gravity));
|
PUT(dict, "end_right_gravity", BOOLEAN_OBJ(extmark->end_right_gravity));
|
||||||
}
|
}
|
||||||
|
|
||||||
Decoration *decor = &extmark.decor;
|
const Decoration *decor = &extmark->decor;
|
||||||
if (decor->hl_id) {
|
if (decor->hl_id) {
|
||||||
String name = cstr_to_string((const char *)syn_id2name(decor->hl_id));
|
String name = cstr_to_string((const char *)syn_id2name(decor->hl_id));
|
||||||
PUT(dict, "hl_group", STRING_OBJ(name));
|
PUT(dict, "hl_group", STRING_OBJ(name));
|
||||||
@ -238,7 +238,7 @@ ArrayOf(Integer) nvim_buf_get_extmark_by_id(Buffer buffer, Integer ns_id,
|
|||||||
if (extmark.row < 0) {
|
if (extmark.row < 0) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
return extmark_to_array(extmark, false, details);
|
return extmark_to_array(&extmark, false, details);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Gets extmarks in "traversal order" from a |charwise| region defined by
|
/// Gets extmarks in "traversal order" from a |charwise| region defined by
|
||||||
@ -357,7 +357,7 @@ Array nvim_buf_get_extmarks(Buffer buffer, Integer ns_id, Object start, Object e
|
|||||||
u_row, u_col, (int64_t)limit, reverse);
|
u_row, u_col, (int64_t)limit, reverse);
|
||||||
|
|
||||||
for (size_t i = 0; i < kv_size(marks); i++) {
|
for (size_t i = 0; i < kv_size(marks); i++) {
|
||||||
ADD(rv, ARRAY_OBJ(extmark_to_array(kv_A(marks, i), true, (bool)details)));
|
ADD(rv, ARRAY_OBJ(extmark_to_array(&kv_A(marks, i), true, (bool)details)));
|
||||||
}
|
}
|
||||||
|
|
||||||
kv_destroy(marks);
|
kv_destroy(marks);
|
||||||
|
@ -1624,6 +1624,7 @@ void create_user_command(String name, Object command, Dict(user_command) *opts,
|
|||||||
err:
|
err:
|
||||||
NLUA_CLEAR_REF(luaref);
|
NLUA_CLEAR_REF(luaref);
|
||||||
NLUA_CLEAR_REF(compl_luaref);
|
NLUA_CLEAR_REF(compl_luaref);
|
||||||
|
xfree(compl_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
int find_sid(uint64_t channel_id)
|
int find_sid(uint64_t channel_id)
|
||||||
|
@ -3598,5 +3598,6 @@ char_u *register_cfunc(cfunc_T cb, cfunc_free_T cb_free, void *state)
|
|||||||
STRCPY(fp->uf_name, name);
|
STRCPY(fp->uf_name, name);
|
||||||
hash_add(&func_hashtab, UF2HIKEY(fp));
|
hash_add(&func_hashtab, UF2HIKEY(fp));
|
||||||
|
|
||||||
|
// coverity[leaked_storage]
|
||||||
return fp->uf_name;
|
return fp->uf_name;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ static void add_user(garray_T *users, char *user, bool need_copy)
|
|||||||
|
|
||||||
if (user_copy == NULL || *user_copy == NUL) {
|
if (user_copy == NULL || *user_copy == NUL) {
|
||||||
if (need_copy) {
|
if (need_copy) {
|
||||||
xfree(user);
|
xfree(user_copy);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1496,6 +1496,7 @@ int kv_do_printf(StringBuilder *str, const char *fmt, ...)
|
|||||||
// printed string didn't fit, resize and try again
|
// printed string didn't fit, resize and try again
|
||||||
if ((size_t)printed >= remaining) {
|
if ((size_t)printed >= remaining) {
|
||||||
kv_ensure_space(*str, (size_t)printed + 1); // include space for NUL terminator at the end
|
kv_ensure_space(*str, (size_t)printed + 1); // include space for NUL terminator at the end
|
||||||
|
assert(str->items != NULL);
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
printed = vsnprintf(str->items + str->size, str->capacity - str->size, fmt, ap);
|
printed = vsnprintf(str->items + str->size, str->capacity - str->size, fmt, ap);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
Loading…
Reference in New Issue
Block a user