summaryrefslogtreecommitdiff
path: root/src/index.c
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2013-11-19 13:24:10 +0100
committernulltoken <emeric.fermas@gmail.com>2013-11-19 13:25:39 +0100
commitbd15b513058afc53543b48383ec5bc56605f6c1e (patch)
tree434c526712d8e2ed1f39ba62200eb88cb76a648b /src/index.c
parenta5d73188023cf0ae0b6fc42dfeddce5a9ee8ad5f (diff)
downloadlibgit2-bd15b513058afc53543b48383ec5bc56605f6c1e.tar.gz
index: Free the index on git_index_open() failure
Diffstat (limited to 'src/index.c')
-rw-r--r--src/index.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/index.c b/src/index.c
index ecab15024..09e7b2346 100644
--- a/src/index.c
+++ b/src/index.c
@@ -321,6 +321,7 @@ void git_index__set_ignore_case(git_index *index, bool ignore_case)
int git_index_open(git_index **index_out, const char *index_path)
{
git_index *index;
+ int error;
assert(index_out);
@@ -346,10 +347,15 @@ int git_index_open(git_index **index_out, const char *index_path)
index->entries_search_path = index_srch_path;
index->reuc_search = reuc_srch;
+ if ((index_path != NULL) && ((error = git_index_read(index, true)) < 0)) {
+ git_index_free(index);
+ return error;
+ }
+
*index_out = index;
GIT_REFCOUNT_INC(index);
- return (index_path != NULL) ? git_index_read(index, true) : 0;
+ return 0;
}
int git_index_new(git_index **out)