Skip to content

Commit

Permalink
Merge pull request #18648 from jamessan/coverity-fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
jamessan committed May 20, 2022
2 parents c847a0e + 3e627f9 commit b3453ea
Show file tree
Hide file tree
Showing 7 changed files with 86 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/coverity-scan.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Coverity
on:
schedule:
- cron: '10 0 * * 1' # Run every Monday at 00:10
- cron: '10 0 * * *' # Run every day at 00:10
workflow_dispatch:

jobs:
Expand Down
69 changes: 69 additions & 0 deletions src/coverity-model.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,72 @@ int tv_dict_add(dict_T *const d, dictitem_T *const 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;
}
24 changes: 12 additions & 12 deletions src/nvim/api/extmark.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
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.col));
ADD(rv, INTEGER_OBJ(extmark->row));
ADD(rv, INTEGER_OBJ(extmark->col));

if (add_dict) {
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) {
PUT(dict, "end_row", INTEGER_OBJ(extmark.end_row));
PUT(dict, "end_col", INTEGER_OBJ(extmark.end_col));
PUT(dict, "end_right_gravity", BOOLEAN_OBJ(extmark.end_right_gravity));
if (extmark->end_row >= 0) {
PUT(dict, "end_row", INTEGER_OBJ(extmark->end_row));
PUT(dict, "end_col", INTEGER_OBJ(extmark->end_col));
PUT(dict, "end_right_gravity", BOOLEAN_OBJ(extmark->end_right_gravity));
}

Decoration *decor = &extmark.decor;
const Decoration *decor = &extmark->decor;
if (decor->hl_id) {
String name = cstr_to_string((const char *)syn_id2name(decor->hl_id));
PUT(dict, "hl_group", STRING_OBJ(name));
Expand Down Expand Up @@ -238,7 +238,7 @@ ArrayOf(Integer) nvim_buf_get_extmark_by_id(Buffer buffer, Integer ns_id,
if (extmark.row < 0) {
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
Expand Down Expand Up @@ -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);

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);
Expand Down
1 change: 1 addition & 0 deletions src/nvim/api/private/helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -1624,6 +1624,7 @@ void create_user_command(String name, Object command, Dict(user_command) *opts,
err:
NLUA_CLEAR_REF(luaref);
NLUA_CLEAR_REF(compl_luaref);
xfree(compl_arg);
}

int find_sid(uint64_t channel_id)
Expand Down
1 change: 1 addition & 0 deletions src/nvim/eval/userfunc.c
Original file line number Diff line number Diff line change
Expand Up @@ -3598,5 +3598,6 @@ char_u *register_cfunc(cfunc_T cb, cfunc_free_T cb_free, void *state)
STRCPY(fp->uf_name, name);
hash_add(&func_hashtab, UF2HIKEY(fp));

// coverity[leaked_storage]
return fp->uf_name;
}
2 changes: 1 addition & 1 deletion src/nvim/os/users.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ static void add_user(garray_T *users, char *user, bool need_copy)

if (user_copy == NULL || *user_copy == NUL) {
if (need_copy) {
xfree(user);
xfree(user_copy);
}
return;
}
Expand Down
1 change: 1 addition & 0 deletions src/nvim/strings.c
Original file line number Diff line number Diff line change
Expand Up @@ -1496,6 +1496,7 @@ int kv_do_printf(StringBuilder *str, const char *fmt, ...)
// printed string didn't fit, resize and try again
if ((size_t)printed >= remaining) {
kv_ensure_space(*str, (size_t)printed + 1); // include space for NUL terminator at the end
assert(str->items != NULL);
va_start(ap, fmt);
printed = vsnprintf(str->items + str->size, str->capacity - str->size, fmt, ap);
va_end(ap);
Expand Down

0 comments on commit b3453ea

Please sign in to comment.