Commit bcb080b00abfd6bf10ba74d1bc4546d2386d4439

schu 2011-08-16T09:57:43

reflog: fix memory leaks Make sure to free the existing reflog when we run out or memory while adding new entries. Signed-off-by: schu <schu-github@schulog.org>

diff --git a/src/reflog.c b/src/reflog.c
index 85e7681..a2dea88 100644
--- a/src/reflog.c
+++ b/src/reflog.c
@@ -192,8 +192,10 @@ int git_reflog_read(git_reflog **reflog, git_reference *ref)
 
 	git_path_join_n(log_path, 3, ref->owner->path_repository, GIT_REFLOG_DIR, ref->name);
 
-	if ((error = git_futils_readbuffer(&log_file, log_path)) < GIT_SUCCESS)
+	if ((error = git_futils_readbuffer(&log_file, log_path)) < GIT_SUCCESS) {
+		git_reflog_free(log);
 		return git__rethrow(error, "Failed to read reflog. Cannot read file `%s`", log_path);
+	}
 
 	error = reflog_parse(log, log_file.data, log_file.len);
 
@@ -201,6 +203,8 @@ int git_reflog_read(git_reflog **reflog, git_reference *ref)
 
 	if (error == GIT_SUCCESS)
 		*reflog = log;
+	else
+		git_reflog_free(log);
 
 	return error == GIT_SUCCESS ? GIT_SUCCESS : git__rethrow(error, "Failed to read reflog");
 }