blame: fix memory corruption scrambling revision name in error message

When attempting to blame a non-existing path, git should show an error message like this: $ git blame e83c51633 -- nonexisting-file fatal: no such path nonexisting-file in e83c51633 Since the recent commit 835c49f7d (blame: rework methods that determine 'final' commit, 2017-05-24) the revision name is either missing or some scrambled characters are shown instead. The reason is that the revision name must be duplicated, because it is invalidated when the pending objects array is cleared in the meantime, but this commit dropped the duplication. Restore the duplication of the revision name in the affected functions (find_single_final() and find_single_initial()). Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

SZEDER Gábor committed Jul 24, 2017 at 23:15 UTC 9e7d8a9bfb329c7f099abc1390a294482b5adbae
1 file changed +4 -2
blame.c
+4 -2
@@ -1664,7 +1664,7 @@ static struct commit *find_single_final(struct rev_info *revs,
1664 name = revs->pending.objects[i].name;
1665 }
1666 if (name_p)
1667 - *name_p = name;
1667 + *name_p = xstrdup_or_null(name);
1668 return found;
1669 }
1670
@@ -1736,7 +1736,7 @@ static struct commit *find_single_initial(struct rev_info *revs,
1736 die("No commit to dig up from?");
1737
1738 if (name_p)
1739 - *name_p = name;
1739 + *name_p = xstrdup(name);
1740 return found;
1741 }
1742
@@ -1844,6 +1844,8 @@ void setup_scoreboard(struct blame_scoreboard *sb, const char *path, struct blam
1844
1845 if (orig)
1846 *orig = o;
1847 +
1848 + free((char *)final_commit_name);
1849 }
1850
1851