Commit 7a3f1de500423ed1cdf1d97a273146f2098b672e

Jason Haslam 2016-08-22T09:27:47

filesystem_iterator: fixed double free on error

diff --git a/src/iterator.c b/src/iterator.c
index 87e0d53..598c69c 100644
--- a/src/iterator.c
+++ b/src/iterator.c
@@ -1834,6 +1834,9 @@ static int iterator_for_filesystem(
 	iter = git__calloc(1, sizeof(filesystem_iterator));
 	GITERR_CHECK_ALLOC(iter);
 
+	iter->base.type = type;
+	iter->base.cb = &callbacks;
+
 	root_len = strlen(root);
 
 	iter->root = git__malloc(root_len+2);
@@ -1851,9 +1854,6 @@ static int iterator_for_filesystem(
 	if ((error = git_buf_puts(&iter->current_path, iter->root)) < 0)
 		goto on_error;
 
-	iter->base.type = type;
-	iter->base.cb = &callbacks;
-
 	if ((error = iterator_init_common(&iter->base, repo, index, options)) < 0)
 		goto on_error;
 
@@ -1877,8 +1877,6 @@ static int iterator_for_filesystem(
 	return 0;
 
 on_error:
-	git__free(iter->root);
-	git_buf_free(&iter->current_path);
 	git_iterator_free(&iter->base);
 	return error;
 }