[PATCH 1/3] get_sha1_oneline: do not leak or double free
- From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
- Date
- Dec 13, 2010, 03:01 UTC
- Message-ID
- <1292209275-17451-1-git-send-email-pclouds@gmail.com>
Double free can happen when commit->buffer == NULL in the first iteration, then != NULL in the next two iterations.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> --- sha1_name.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/sha1_name.c b/sha1_name.c index 2c3a5fb..13ee6f5 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -718,13 +718,13 @@ static int get_sha1_oneline(const char *prefix, unsigned char *sha1) commit = pop_most_recent_commit(&list, ONELINE_SEEN); if (!parse_object(commit->object.sha1)) continue; - free(temp_commit_buffer); if (commit->buffer) p = commit->buffer; else { p = read_sha1_file(commit->object.sha1, &type, &size); if (!p) continue; + free(temp_commit_buffer); temp_commit_buffer = p; } if (!(p = strstr(p, "\n\n"))) @@ -740,6 +740,7 @@ static int get_sha1_oneline(const char *prefix, unsigned char *sha1) free_commit_list(list); for (l = backup; l; l = l->next) clear_commit_marks(l->item, ONELINE_SEEN); + free_commit_list(backup); return retval; }
-- 1.7.3.3.476.g10a82