summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2016-06-07 09:20:35 +0200
committerPatrick Steinhardt <ps@pks.im>2016-06-07 09:22:02 +0200
commit4d8fe1cda0175bdedb4a868910e9a24c37d72d74 (patch)
treebc6b7a8a8a395ca937a48d0f3ff5a8f43bf02aca
parent956f1e2387a807a2e3ec25e75d04050c705ab3b9 (diff)
downloadlibgit2-4d8fe1cda0175bdedb4a868910e9a24c37d72d74.tar.gz
coverity: model functions printing into git_buf
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.
-rw-r--r--script/user_model.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/script/user_model.c b/script/user_model.c
index 3c00b6984..a933d735c 100644
--- a/script/user_model.c
+++ b/script/user_model.c
@@ -6,8 +6,11 @@
*/
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;
@@ -35,3 +38,38 @@ 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;
+}