Commit 671bbdd37227d3466ba9a8e1ad0cc6c46c701967

Jeff King 2012-01-05T17:31:13

reflog_write: don't access free()'d memory We get the oid of a reference, free the reference, then convert the oid to a string. We need to convert the oid before freeing the memory.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
diff --git a/src/reflog.c b/src/reflog.c
index 84ce52d..a327975 100644
--- a/src/reflog.c
+++ b/src/reflog.c
@@ -237,10 +237,10 @@ int git_reflog_write(git_reference *ref, const git_oid *oid_old,
 		return error;
 	}
 
-	git_reference_free(r);
-
 	git_oid_to_string(new, GIT_OID_HEXSZ+1, oid);
 
+	git_reference_free(r);
+
 	error = git_buf_join_n(&log_path, '/', 3,
 		ref->owner->path_repository, GIT_REFLOG_DIR, ref->name);
 	if (error < GIT_SUCCESS)