Commit fe21d708b02c1b35c0ea717889ea633fe78eabaf

Carlos Martín Nieto 2015-03-04T00:29:37

Plug a few leaks

diff --git a/src/diff_tform.c b/src/diff_tform.c
index 8ee568c..06c1230 100644
--- a/src/diff_tform.c
+++ b/src/diff_tform.c
@@ -277,7 +277,7 @@ static int normalize_find_opts(
 	if (!given ||
 		 (given->flags & GIT_DIFF_FIND_ALL) == GIT_DIFF_FIND_BY_CONFIG)
 	{
-		const char *rule =
+		char *rule =
 			git_config__get_string_force(cfg, "diff.renames", "true");
 		int boolval;
 
@@ -287,6 +287,8 @@ static int normalize_find_opts(
 			opts->flags |= GIT_DIFF_FIND_RENAMES | GIT_DIFF_FIND_COPIES;
 		else
 			opts->flags |= GIT_DIFF_FIND_RENAMES;
+
+		git__free(rule);
 	}
 
 	/* some flags imply others */
diff --git a/src/rebase.c b/src/rebase.c
index 43945df..eb25d4c 100644
--- a/src/rebase.c
+++ b/src/rebase.c
@@ -466,11 +466,11 @@ static int rebase_normalize_opts(
 		opts->rewrite_notes_ref = git__strdup(given_opts->rewrite_notes_ref);
 		GITERR_CHECK_ALLOC(opts->rewrite_notes_ref);
 	} else if (git_config__get_bool_force(config, "notes.rewrite.rebase", 1)) {
-		const char *rewrite_ref = git_config__get_string_force(
+		char *rewrite_ref = git_config__get_string_force(
 			config, "notes.rewriteref", NOTES_DEFAULT_REF);
 
 		if (rewrite_ref) {
-			opts->rewrite_notes_ref = git__strdup(rewrite_ref);
+			opts->rewrite_notes_ref = rewrite_ref;
 			GITERR_CHECK_ALLOC(opts->rewrite_notes_ref);
 		}
 	}
diff --git a/src/refs.c b/src/refs.c
index 3f6c33d..360e653 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -1075,7 +1075,7 @@ int git_reference__update_terminal(
 	const git_signature *sig,
 	const char *log_message)
 {
-	git_reference *ref = NULL;
+	git_reference *ref = NULL, *ref2 = NULL;
 	git_signature *who = NULL;
 	const git_signature *to_use;
 	int error = 0;
@@ -1090,18 +1090,20 @@ int git_reference__update_terminal(
 	if (error == GIT_ENOTFOUND && ref) {
 		assert(git_reference_type(ref) == GIT_REF_SYMBOLIC);
 		giterr_clear();
-		error = reference__create(&ref, repo, ref->target.symbolic, oid, NULL, 0, to_use,
+		error = reference__create(&ref2, repo, ref->target.symbolic, oid, NULL, 0, to_use,
 					  log_message, NULL, NULL);
 	} else if (error == GIT_ENOTFOUND) {
 		giterr_clear();
-		error = reference__create(&ref, repo, ref_name, oid, NULL, 0, to_use,
+		error = reference__create(&ref2, repo, ref_name, oid, NULL, 0, to_use,
 					  log_message, NULL, NULL);
 	}  else if (error == 0) {
 		assert(git_reference_type(ref) == GIT_REF_OID);
-		error = reference__create(&ref, repo, ref->name, oid, NULL, 1, to_use,
+		error = reference__create(&ref2, repo, ref->name, oid, NULL, 1, to_use,
 					  log_message, &ref->target.oid, NULL);
 	}
 
+	git_reference_free(ref2);
+	git_reference_free(ref);
 	git_signature_free(who);
 	return error;
 }
diff --git a/src/repository.c b/src/repository.c
index 43d3aea..e9d74b7 100644
--- a/src/repository.c
+++ b/src/repository.c
@@ -1948,6 +1948,7 @@ int git_repository_set_head(
 	}
 
 cleanup:
+	git_buf_free(&log_message);
 	git_reference_free(current);
 	git_reference_free(ref);
 	git_reference_free(new_head);
@@ -1980,6 +1981,7 @@ int git_repository_set_head_detached(
 	error = git_reference_create(&new_head, repo, GIT_HEAD_FILE, git_object_id(peeled), true, git_buf_cstr(&log_message));
 
 cleanup:
+	git_buf_free(&log_message);
 	git_object_free(object);
 	git_object_free(peeled);
 	git_reference_free(current);
@@ -2012,6 +2014,7 @@ int git_repository_detach_head(git_repository* repo)
 			1, git_buf_cstr(&log_message));
 
 cleanup:
+	git_buf_free(&log_message);
 	git_object_free(object);
 	git_reference_free(old_head);
 	git_reference_free(new_head);
diff --git a/tests/config/include.c b/tests/config/include.c
index e9f542a..882b89b 100644
--- a/tests/config/include.c
+++ b/tests/config/include.c
@@ -128,5 +128,6 @@ void test_config_include__depth2(void)
 	cl_git_pass(git_config_get_string_buf(&buf, cfg, "foo.bar2"));
 	cl_assert_equal_s("baz2", git_buf_cstr(&buf));
 
+	git_buf_free(&buf);
 	git_config_free(cfg);
 }
diff --git a/tests/reset/hard.c b/tests/reset/hard.c
index f21ea9f..f6ca103 100644
--- a/tests/reset/hard.c
+++ b/tests/reset/hard.c
@@ -221,4 +221,6 @@ void test_reset_hard__reflog_is_correct(void)
 	cl_git_pass(git_reset(repo, target, GIT_RESET_HARD, NULL));
 	reflog_check(repo, "HEAD", 4, NULL, git_buf_cstr(&buf));
 	reflog_check(repo, "refs/heads/master", 4, NULL, git_buf_cstr(&buf));
+
+	git_buf_free(&buf);
 }
diff --git a/tests/reset/mixed.c b/tests/reset/mixed.c
index 5b42ebc..b374902 100644
--- a/tests/reset/mixed.c
+++ b/tests/reset/mixed.c
@@ -72,4 +72,6 @@ void test_reset_mixed__reflog_is_correct(void)
 	cl_git_pass(git_reset(repo, target, GIT_RESET_MIXED, NULL));
 	reflog_check(repo, "HEAD", 10, NULL, git_buf_cstr(&buf));
 	reflog_check(repo, "refs/heads/master", 10, NULL, git_buf_cstr(&buf));
+
+	git_buf_free(&buf);
 }