summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2018-07-20 12:56:49 +0200
committerGitHub <noreply@github.com>2018-07-20 12:56:49 +0200
commit0652abaaeaff768e78a65464e59bd1896ce2f6ce (patch)
treea7dd95e75d90d766fb98f593d6e2cf3bf5bfad39
parentfa401a32d23eb832c6494db9770e6522b11f36d7 (diff)
parent89091d36c47299ee374d50a278c7d676911f3e0d (diff)
downloadlibgit2-0652abaaeaff768e78a65464e59bd1896ce2f6ce.tar.gz
Merge pull request #4702 from tiennou/fix/coverity
Assorted Coverity fixes
-rw-r--r--src/blame.c7
-rw-r--r--src/submodule.c3
-rw-r--r--src/transports/smart.c38
-rw-r--r--src/transports/smart_protocol.c2
-rw-r--r--tests/checkout/conflict.c30
-rw-r--r--tests/checkout/tree.c6
-rw-r--r--tests/describe/t6120.c4
-rw-r--r--tests/diff/workdir.c4
-rw-r--r--tests/mailmap/parsing.c2
-rw-r--r--tests/merge/workdir/dirty.c2
-rw-r--r--tests/stash/apply.c2
11 files changed, 54 insertions, 46 deletions
diff --git a/src/blame.c b/src/blame.c
index fc87bd1c1..7a81a232c 100644
--- a/src/blame.c
+++ b/src/blame.c
@@ -133,8 +133,11 @@ git_blame* git_blame__alloc(
return NULL;
}
- if (opts.flags & GIT_BLAME_USE_MAILMAP)
- git_mailmap_from_repository(&gbr->mailmap, repo);
+ if (opts.flags & GIT_BLAME_USE_MAILMAP &&
+ git_mailmap_from_repository(&gbr->mailmap, repo) < 0) {
+ git_blame_free(gbr);
+ return NULL;
+ }
return gbr;
}
diff --git a/src/submodule.c b/src/submodule.c
index d0c7d04e6..3cbddfa3e 100644
--- a/src/submodule.c
+++ b/src/submodule.c
@@ -260,7 +260,8 @@ static int load_submodule_names(git_strmap **out, git_repository *repo, git_conf
git_strmap_insert(names, entry->value, git_buf_detach(&buf), &rval);
if (rval < 0) {
giterr_set(GITERR_NOMEMORY, "error inserting submodule into hash table");
- return -1;
+ error = -1;
+ goto out;
}
}
if (error == GIT_ITEROVER)
diff --git a/src/transports/smart.c b/src/transports/smart.c
index 69c129b5e..be3f9c8a8 100644
--- a/src/transports/smart.c
+++ b/src/transports/smart.c
@@ -279,30 +279,34 @@ static int git_smart__connect(
return error;
/* Detect capabilities */
- if (git_smart__detect_caps(first, &t->caps, &symrefs) < 0) {
- free_symrefs(&symrefs);
- return -1;
- }
+ if ((error = git_smart__detect_caps(first, &t->caps, &symrefs)) == 0) {
+ /* If the only ref in the list is capabilities^{} with OID_ZERO, remove it */
+ if (1 == t->refs.length && !strcmp(first->head.name, "capabilities^{}") &&
+ git_oid_iszero(&first->head.oid)) {
+ git_vector_clear(&t->refs);
+ git_pkt_free((git_pkt *)first);
+ }
- /* If the only ref in the list is capabilities^{} with OID_ZERO, remove it */
- if (1 == t->refs.length && !strcmp(first->head.name, "capabilities^{}") &&
- git_oid_iszero(&first->head.oid)) {
- git_vector_clear(&t->refs);
- git_pkt_free((git_pkt *)first);
+ /* Keep a list of heads for _ls */
+ git_smart__update_heads(t, &symrefs);
+ } else if (error == GIT_ENOTFOUND) {
+ /* There was no ref packet received, or the cap list was empty */
+ error = 0;
+ } else {
+ giterr_set(GITERR_NET, "invalid response");
+ goto cleanup;
}
- /* Keep a list of heads for _ls */
- git_smart__update_heads(t, &symrefs);
-
- free_symrefs(&symrefs);
-
- if (t->rpc && git_smart__reset_stream(t, false) < 0)
- return -1;
+ if (t->rpc && (error = git_smart__reset_stream(t, false)) < 0)
+ goto cleanup;
/* We're now logically connected. */
t->connected = 1;
- return 0;
+cleanup:
+ free_symrefs(&symrefs);
+
+ return error;
}
static int git_smart__ls(const git_remote_head ***out, size_t *size, git_transport *transport)
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c
index 716aa45b4..ce63cb195 100644
--- a/src/transports/smart_protocol.c
+++ b/src/transports/smart_protocol.c
@@ -136,7 +136,7 @@ int git_smart__detect_caps(git_pkt_ref *pkt, transport_smart_caps *caps, git_vec
/* No refs or capabilites, odd but not a problem */
if (pkt == NULL || pkt->capabilities == NULL)
- return 0;
+ return GIT_ENOTFOUND;
ptr = pkt->capabilities;
while (ptr != NULL && *ptr != '\0') {
diff --git a/tests/checkout/conflict.c b/tests/checkout/conflict.c
index 9b86cfaeb..90603d4b7 100644
--- a/tests/checkout/conflict.c
+++ b/tests/checkout/conflict.c
@@ -93,7 +93,7 @@ static void create_index(struct checkout_index_entry *entries, size_t entries_le
if (entries[i].stage == 3 && (i == 0 || strcmp(entries[i-1].path, entries[i].path) != 0 || entries[i-1].stage != 2))
p_unlink(git_buf_cstr(&path));
- git_index_remove_bypath(g_index, entries[i].path);
+ cl_git_pass(git_index_remove_bypath(g_index, entries[i].path));
}
for (i = 0; i < entries_len; i++) {
@@ -133,7 +133,7 @@ static void create_conflicting_index(void)
};
create_index(checkout_index_entries, 3);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
}
static void ensure_workdir_contents(const char *path, const char *contents)
@@ -271,7 +271,7 @@ void test_checkout_conflict__automerge(void)
};
create_index(checkout_index_entries, 3);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -303,7 +303,7 @@ void test_checkout_conflict__directory_file(void)
opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
create_index(checkout_index_entries, 12);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -344,7 +344,7 @@ void test_checkout_conflict__directory_file_with_custom_labels(void)
opts.their_label = "branch";
create_index(checkout_index_entries, 12);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -383,7 +383,7 @@ void test_checkout_conflict__link_file(void)
opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
create_index(checkout_index_entries, 12);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -410,7 +410,7 @@ void test_checkout_conflict__links(void)
opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
create_index(checkout_index_entries, 5);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -431,7 +431,7 @@ void test_checkout_conflict__add_add(void)
opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
create_index(checkout_index_entries, 2);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -472,7 +472,7 @@ void test_checkout_conflict__mode_change(void)
opts.checkout_strategy |= GIT_CHECKOUT_SAFE;
create_index(checkout_index_entries, 18);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -604,7 +604,7 @@ void test_checkout_conflict__renames(void)
create_index(checkout_index_entries, 41);
create_index_names(checkout_name_entries, 9);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -789,7 +789,7 @@ void test_checkout_conflict__rename_keep_ours(void)
create_index(checkout_index_entries, 41);
create_index_names(checkout_name_entries, 9);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -922,7 +922,7 @@ void test_checkout_conflict__name_mangled_file_exists_in_workdir(void)
create_index(checkout_index_entries, 24);
create_index_names(checkout_name_entries, 6);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
/* Add some files on disk that conflict with the names that would be chosen
* for the files written for each side. */
@@ -1012,7 +1012,7 @@ void test_checkout_conflict__update_only(void)
opts.checkout_strategy |= GIT_CHECKOUT_UPDATE_ONLY;
create_index(checkout_index_entries, 3);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(p_mkdir("merge-resolve/directory_file-two", 0777));
cl_git_rewritefile("merge-resolve/directory_file-two/file", CONFLICTING_OURS_FILE);
@@ -1063,7 +1063,7 @@ void test_checkout_conflict__path_filters(void)
opts.paths = patharray;
create_index(checkout_index_entries, 12);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
@@ -1120,7 +1120,7 @@ void test_checkout_conflict__report_progress(void)
create_index(checkout_index_entries, 12);
- git_index_write(g_index);
+ cl_git_pass(git_index_write(g_index));
cl_git_pass(git_checkout_index(g_repo, g_index, &opts));
diff --git a/tests/checkout/tree.c b/tests/checkout/tree.c
index a69574bf3..4008935d6 100644
--- a/tests/checkout/tree.c
+++ b/tests/checkout/tree.c
@@ -954,7 +954,7 @@ static void create_conflict(const char *path)
git_oid_fromstr(&entry.id, "2bd0a343aeef7a2cf0d158478966a6e587ff3863");
cl_git_pass(git_index_add(index, &entry));
- git_index_write(index);
+ cl_git_pass(git_index_write(index));
git_index_free(index);
}
@@ -1127,7 +1127,7 @@ void test_checkout_tree__removes_conflicts(void)
create_conflict("other.txt");
cl_git_mkfile("testrepo/other.txt", "This is another conflict file.\n");
- git_index_write(index);
+ cl_git_pass(git_index_write(index));
cl_git_pass(git_checkout_tree(g_repo, (const git_object *)commit, &opts));
@@ -1172,7 +1172,7 @@ void test_checkout_tree__removes_conflicts_only_by_pathscope(void)
create_conflict("other.txt");
cl_git_mkfile("testrepo/other.txt", "This is another conflict file.\n");
- git_index_write(index);
+ cl_git_pass(git_index_write(index));
cl_git_pass(git_checkout_tree(g_repo, (const git_object *)commit, &opts));
diff --git a/tests/describe/t6120.c b/tests/describe/t6120.c
index 65e8582aa..5ec176b87 100644
--- a/tests/describe/t6120.c
+++ b/tests/describe/t6120.c
@@ -104,8 +104,8 @@ static void commit_and_tag(
cl_git_append2file("describe/file", "\n");
- git_index_add_bypath(index, "describe/file");
- git_index_write(index);
+ cl_git_pass(git_index_add_bypath(index, "file"));
+ cl_git_pass(git_index_write(index));
*time += 10;
cl_repo_commit_from_index(&commit_id, repo, NULL, *time, commit_msg);
diff --git a/tests/diff/workdir.c b/tests/diff/workdir.c
index d8270621f..dab6147b5 100644
--- a/tests/diff/workdir.c
+++ b/tests/diff/workdir.c
@@ -1910,7 +1910,7 @@ void test_diff_workdir__binary_detection(void)
cl_git_write2file(
b.ptr, data[i].ptr, data[i].size, O_WRONLY|O_TRUNC, 0664);
}
- git_index_write(idx);
+ cl_git_pass(git_index_write(idx));
cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, NULL));
@@ -1938,7 +1938,7 @@ void test_diff_workdir__binary_detection(void)
cl_git_write2file(b.ptr, "baseline\n", 9, O_WRONLY|O_TRUNC, 0664);
}
- git_index_write(idx);
+ cl_git_pass(git_index_write(idx));
cl_git_pass(git_diff_index_to_workdir(&diff, g_repo, NULL, NULL));
diff --git a/tests/mailmap/parsing.c b/tests/mailmap/parsing.c
index 4479e4131..dc5096c9c 100644
--- a/tests/mailmap/parsing.c
+++ b/tests/mailmap/parsing.c
@@ -86,7 +86,7 @@ void test_mailmap_parsing__windows_string(void)
/* Parse with windows-style line endings */
git_buf_attach_notowned(&unixbuf, string_mailmap, strlen(string_mailmap));
- git_buf_text_lf_to_crlf(&winbuf, &unixbuf);
+ cl_git_pass(git_buf_text_lf_to_crlf(&winbuf, &unixbuf));
cl_git_pass(git_mailmap_from_buffer(&g_mailmap, winbuf.ptr, winbuf.size));
git_buf_dispose(&winbuf);
diff --git a/tests/merge/workdir/dirty.c b/tests/merge/workdir/dirty.c
index 66301e156..dd7267b61 100644
--- a/tests/merge/workdir/dirty.c
+++ b/tests/merge/workdir/dirty.c
@@ -337,7 +337,7 @@ void test_merge_workdir_dirty__identical_staged_files_allowed(void)
for (i = 0, content = result_contents[i]; content[0]; content = result_contents[++i]) {
stage_content(content);
- git_index_write(repo_index);
+ cl_git_pass(git_index_write(repo_index));
cl_git_pass(merge_branch());
}
}
diff --git a/tests/stash/apply.c b/tests/stash/apply.c
index 16cb14000..063223ae6 100644
--- a/tests/stash/apply.c
+++ b/tests/stash/apply.c
@@ -34,7 +34,7 @@ void test_stash_apply__initialize(void)
cl_git_pass(git_index_add_bypath(repo_index, "who"));
cl_git_pass(git_index_add_bypath(repo_index, "why"));
cl_git_pass(git_index_add_bypath(repo_index, "where"));
- git_index_write(repo_index);
+ cl_git_pass(git_index_write(repo_index));
cl_git_rewritefile("stash/where", "....\n");