mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 08:53:48 +00:00

The `git_buf` structure seems to be too complicated to correctly grasp for Coverity. As such, add simpler models trying to guide Coverity and remove false positives related to these functions.
76 lines
1.6 KiB
C
76 lines
1.6 KiB
C
/*
|
|
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
*
|
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
*/
|
|
|
|
void *realloc(void *ptr, size_t size);
|
|
void *memmove(void *dest, const void *src, size_t n);
|
|
size_t strlen(const char *s);
|
|
|
|
typedef struct va_list_str *va_list;
|
|
|
|
typedef struct git_vector {
|
|
void **contents;
|
|
size_t length;
|
|
} git_vector;
|
|
|
|
typedef struct git_buf {
|
|
char *ptr;
|
|
size_t asize, size;
|
|
} git_buf;
|
|
|
|
int git_vector_insert(git_vector *v, void *element)
|
|
{
|
|
if (!v)
|
|
__coverity_panic__();
|
|
|
|
v->contents = realloc(v->contents, ++v->length);
|
|
if (!v->contents)
|
|
__coverity_panic__();
|
|
v->contents[v->length] = element;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int git_buf_len(const struct git_buf *buf)
|
|
{
|
|
return strlen(buf->ptr);
|
|
}
|
|
|
|
int git_buf_vprintf(git_buf *buf, const char *format, va_list ap)
|
|
{
|
|
char ch, *s;
|
|
size_t len;
|
|
|
|
__coverity_string_null_sink__(format);
|
|
__coverity_string_size_sink__(format);
|
|
|
|
ch = *format;
|
|
ch = *(char *)ap;
|
|
|
|
buf->ptr = __coverity_alloc__(len);
|
|
__coverity_writeall__(buf->ptr);
|
|
buf->size = len;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int git_buf_put(git_buf *buf, const char *data, size_t len)
|
|
{
|
|
buf->ptr = __coverity_alloc__(buf->size + len + 1);
|
|
memmove(buf->ptr + buf->size, data, len);
|
|
buf->size += len;
|
|
buf->ptr[buf->size + len] = 0;
|
|
return 0;
|
|
}
|
|
|
|
int git_buf_set(git_buf *buf, const void *data, size_t len)
|
|
{
|
|
buf->ptr = __coverity_alloc__(len + 1);
|
|
memmove(buf->ptr, data, len);
|
|
buf->size = len + 1;
|
|
return 0;
|
|
}
|