Commit 757b406504021b3a73e52ce9f95d590d65c7dce5

Russell Belfer 2012-11-09T14:01:44

Fix warnings and valgrind issues This fixes some various warnings that showed up in Travis and a couple uses of uninitialized memory and one memory leak.

diff --git a/src/checkout.c b/src/checkout.c
index 8d164cf..0d14e26 100644
--- a/src/checkout.c
+++ b/src/checkout.c
@@ -432,8 +432,8 @@ static int checkout_get_actions(
 	int error;
 	git_diff_list *diff = data->diff;
 	git_diff_delta *delta;
-	size_t i, *counts;
-	uint32_t *actions;
+	size_t i, *counts = NULL;
+	uint32_t *actions = NULL;
 	git_tree *head = NULL;
 	git_iterator *hiter = NULL;
 	char *pfx = git_pathspec_prefix(&data->opts->paths);
@@ -456,6 +456,7 @@ static int checkout_get_actions(
 		goto fail;
 
 	git__free(pfx);
+	pfx = NULL;
 
 	*counts_ptr = counts = git__calloc(CHECKOUT_ACTION__MAX+1, sizeof(size_t));
 	*actions_ptr = actions = git__calloc(diff->deltas.length, sizeof(uint32_t));
@@ -509,6 +510,8 @@ static int checkout_get_actions(
 	}
 
 	git_iterator_free(hiter);
+	git_tree_free(head);
+
 	return 0;
 
 fail:
@@ -518,6 +521,7 @@ fail:
 	git__free(actions);
 
 	git_iterator_free(hiter);
+	git_tree_free(head);
 	git__free(pfx);
 
 	return -1;
diff --git a/src/index.c b/src/index.c
index 0ae1b44..4324449 100644
--- a/src/index.c
+++ b/src/index.c
@@ -402,7 +402,7 @@ int git_index_read(git_index *index)
 {
 	int error = 0, updated;
 	git_buf buffer = GIT_BUF_INIT;
-	git_futils_filestamp stamp;
+	git_futils_filestamp stamp = {0};
 
 	if (!index->index_file_path) {
 		giterr_set(GITERR_INDEX,
diff --git a/src/pack-objects.c b/src/pack-objects.c
index 7acc933..af7472a 100644
--- a/src/pack-objects.c
+++ b/src/pack-objects.c
@@ -73,16 +73,16 @@ static int packbuilder_config(git_packbuilder *pb)
 {
 	git_config *config;
 	int ret;
+	int64_t val;
 
 	if (git_repository_config__weakptr(&config, pb->repo) < 0)
 		return -1;
 
-#define config_get(key, dst, default) \
-	ret = git_config_get_int64((int64_t *)&dst, config, key); \
-	if (ret == GIT_ENOTFOUND) \
-		dst = default; \
-	else if (ret < 0) \
-		return -1;
+#define config_get(KEY,DST,DFLT) do { \
+	ret = git_config_get_int64(&val, config, KEY); \
+	if (!ret) (DST) = val; \
+	else if (ret == GIT_ENOTFOUND) (DST) = (DFLT); \
+	else if (ret < 0) return -1; } while (0)
 
 	config_get("pack.deltaCacheSize", pb->max_delta_cache_size,
 		   GIT_PACK_DELTA_CACHE_SIZE);
diff --git a/src/transports/http.c b/src/transports/http.c
index 78977f4..34ade94 100644
--- a/src/transports/http.c
+++ b/src/transports/http.c
@@ -629,6 +629,8 @@ int git_smart_subtransport_http(git_smart_subtransport **out,
 	http_subtransport *t;
 	int flags;
 
+	(void)flags;
+
 	if (!out)
 		return -1;
 
diff --git a/tests-clar/clone/network.c b/tests-clar/clone/network.c
index 68fa8eb..1304f77 100644
--- a/tests-clar/clone/network.c
+++ b/tests-clar/clone/network.c
@@ -113,7 +113,7 @@ void test_clone_network__can_checkout_a_cloned_repo(void)
 	bool checkout_progress_cb_was_called = false,
 		  fetch_progress_cb_was_called = false;
 
-	opts.checkout_strategy = GIT_CHECKOUT_UPDATE_UNMODIFIED;
+	opts.checkout_strategy = GIT_CHECKOUT_SAFE;
 	opts.progress_cb = &checkout_progress;
 	opts.progress_payload = &checkout_progress_cb_was_called;
 
diff --git a/tests-clar/config/configlevel.c b/tests-clar/config/configlevel.c
index 69aede6..1c22e8d 100644
--- a/tests-clar/config/configlevel.c
+++ b/tests-clar/config/configlevel.c
@@ -62,7 +62,6 @@ void test_config_configlevel__fetching_a_level_from_an_empty_compound_config_ret
 {
 	git_config *cfg;
 	git_config *local_cfg;
-	const char *s;
 
 	cl_git_pass(git_config_new(&cfg));
 
diff --git a/tests-clar/stash/stash_helpers.c b/tests-clar/stash/stash_helpers.c
index 000a0f1..86a7418 100644
--- a/tests-clar/stash/stash_helpers.c
+++ b/tests-clar/stash/stash_helpers.c
@@ -16,6 +16,7 @@ void commit_staged_files(
 	cl_git_pass(git_index_write_tree(&tree_oid, index));
 
 	cl_git_pass(git_tree_lookup(&tree, repo, &tree_oid));
+
 	cl_git_pass(git_commit_create_v(
 		commit_oid,
 		repo,