Commit 1af80a676613882b3e04e82874c6e7c8c14b5f49

Russell Belfer 2013-04-18T16:13:52

Fix workdir iterator leak When attempting to create a workdir iterator for a bare repo, don't leak the iterator structure.

diff --git a/src/iterator.c b/src/iterator.c
index a72f97e..ff08c1c 100644
--- a/src/iterator.c
+++ b/src/iterator.c
@@ -1252,16 +1252,14 @@ int git_iterator_for_workdir(
 	const char *end)
 {
 	int error;
-	workdir_iterator *wi = git__calloc(1, sizeof(workdir_iterator));
-	GITERR_CHECK_ALLOC(wi);
-
-	assert(out && repo);
+	workdir_iterator *wi;
 
-	if ((error = git_repository__ensure_not_bare(
-			 repo, "scan working directory")) < 0)
-		return error;
+	if (git_repository__ensure_not_bare(repo, "scan working directory") < 0)
+		return GIT_EBAREREPO;
 
 	/* initialize as an fs iterator then do overrides */
+	wi = git__calloc(1, sizeof(workdir_iterator));
+	GITERR_CHECK_ALLOC(wi);
 	ITERATOR_BASE_INIT((&wi->fi), fs, FS, repo);
 
 	wi->fi.base.type = GIT_ITERATOR_TYPE_WORKDIR;