summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <carlosmn@github.com>2016-02-19 10:21:37 +0100
committerCarlos Martín Nieto <carlosmn@github.com>2016-02-19 10:21:37 +0100
commitb643501dbab3ba6a3c8343349986bc541e9197b8 (patch)
treeb6c7a738741f1158f48cf603d47a9ffab48bb48f
parentc1b75f05ad48e9366e4503d5e392b840127f817f (diff)
parent8a62bf11806d9118301999ff9c58d55057d06917 (diff)
downloadlibgit2-b643501dbab3ba6a3c8343349986bc541e9197b8.tar.gz
Merge pull request #3614 from pks-t/pks/coverity-fixes
Coverity fixes
-rw-r--r--script/user_nodefs.h19
-rw-r--r--src/netops.c4
-rw-r--r--src/signature.c5
-rw-r--r--src/transports/smart_pkt.c3
-rw-r--r--src/transports/smart_protocol.c2
5 files changed, 30 insertions, 3 deletions
diff --git a/script/user_nodefs.h b/script/user_nodefs.h
index 110f76851..3d25d92ec 100644
--- a/script/user_nodefs.h
+++ b/script/user_nodefs.h
@@ -6,3 +6,22 @@
*/
#nodef GITERR_CHECK_ALLOC(ptr) if (ptr == NULL) { __coverity_panic__(); }
+
+#nodef GITERR_CHECK_ALLOC_ADD(out, one, two) \
+ if (GIT_ADD_SIZET_OVERFLOW(out, one, two)) { __coverity_panic__(); }
+
+#nodef GITERR_CHECK_ALLOC_ADD3(out, one, two, three) \
+ if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
+ GIT_ADD_SIZET_OVERFLOW(out, *(out), three)) { __coverity_panic__(); }
+
+#nodef GITERR_CHECK_ALLOC_ADD4(out, one, two, three, four) \
+ if (GIT_ADD_SIZET_OVERFLOW(out, one, two) || \
+ GIT_ADD_SIZET_OVERFLOW(out, *(out), three) || \
+ GIT_ADD_SIZET_OVERFLOW(out, *(out), four)) { __coverity_panic__(); }
+
+#nodef GITERR_CHECK_ALLOC_MULTIPLY(out, nelem, elsize) \
+ if (GIT_MULTIPLY_SIZET_OVERFLOW(out, nelem, elsize)) { __coverity_panic__(); }
+
+#nodef GITERR_CHECK_VERSION(S,V,N) if (giterr__check_version(S,V,N) < 0) { __coverity_panic__(); }
+
+#nodef LOOKS_LIKE_DRIVE_PREFIX(S) (strlen(S) >= 2 && git__isalpha((S)[0]) && (S)[1] == ':')
diff --git a/src/netops.c b/src/netops.c
index 5e8075597..c4241989f 100644
--- a/src/netops.c
+++ b/src/netops.c
@@ -261,6 +261,10 @@ int gitno_extract_url_parts(
*path = git__substrdup(_path, u.field_data[UF_PATH].len);
GITERR_CHECK_ALLOC(*path);
} else {
+ git__free(*port);
+ *port = NULL;
+ git__free(*host);
+ *host = NULL;
giterr_set(GITERR_NET, "invalid url, missing path");
return GIT_EINVALIDSPEC;
}
diff --git a/src/signature.c b/src/signature.c
index 109476efe..d07c93323 100644
--- a/src/signature.c
+++ b/src/signature.c
@@ -79,10 +79,9 @@ int git_signature_new(git_signature **sig_out, const char *name, const char *ema
GITERR_CHECK_ALLOC(p);
p->name = extract_trimmed(name, strlen(name));
+ GITERR_CHECK_ALLOC(p->name);
p->email = extract_trimmed(email, strlen(email));
-
- if (p->name == NULL || p->email == NULL)
- return -1; /* oom */
+ GITERR_CHECK_ALLOC(p->email);
if (p->name[0] == '\0' || p->email[0] == '\0') {
git_signature_free(p);
diff --git a/src/transports/smart_pkt.c b/src/transports/smart_pkt.c
index a6ae55d48..870f08497 100644
--- a/src/transports/smart_pkt.c
+++ b/src/transports/smart_pkt.c
@@ -271,6 +271,7 @@ static int ok_pkt(git_pkt **out, const char *line, size_t len)
line += 3; /* skip "ok " */
if (!(ptr = strchr(line, '\n'))) {
giterr_set(GITERR_NET, "Invalid packet line");
+ git__free(pkt);
return -1;
}
len = ptr - line;
@@ -314,6 +315,8 @@ static int ng_pkt(git_pkt **out, const char *line, size_t len)
line = ptr + 1;
if (!(ptr = strchr(line, '\n'))) {
giterr_set(GITERR_NET, "Invalid packet line");
+ git__free(pkt->ref);
+ git__free(pkt);
return -1;
}
len = ptr - line;
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c
index 1d46d4bc9..6363378ec 100644
--- a/src/transports/smart_protocol.c
+++ b/src/transports/smart_protocol.c
@@ -108,6 +108,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr)
if (giterr_last()->klass != GITERR_NOMEMORY)
goto on_invalid;
+ git__free(mapping);
return error;
}
@@ -120,6 +121,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr)
on_invalid:
giterr_set(GITERR_NET, "remote sent invalid symref");
git_refspec__free(mapping);
+ git__free(mapping);
return -1;
}