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@xxxxxxxxx> --- 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html