summaryrefslogtreecommitdiff
path: root/script
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 /script
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.
Diffstat (limited to 'script')
-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;
+}