mirror of
https://github.com/git/git.git
synced 2024-10-31 06:17:56 +01:00
blame.c: fix garbled error message
The helper functions prepare_final() and prepare_initial() return a pointer to a string that is a member of an object in the revs->pending array. This array is later rebuilt when running prepare_revision_walk() which potentially transforms the pointer target into a bogus string. Fix this by maintaining a copy of the original string. Signed-off-by: Lukas Fleischer <git@cryptocrack.de> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8c53f0719b
commit
a46442f167
1 changed files with 7 additions and 5 deletions
|
@ -2390,7 +2390,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
|
|||
return commit;
|
||||
}
|
||||
|
||||
static const char *prepare_final(struct scoreboard *sb)
|
||||
static char *prepare_final(struct scoreboard *sb)
|
||||
{
|
||||
int i;
|
||||
const char *final_commit_name = NULL;
|
||||
|
@ -2415,10 +2415,10 @@ static const char *prepare_final(struct scoreboard *sb)
|
|||
sb->final = (struct commit *) obj;
|
||||
final_commit_name = revs->pending.objects[i].name;
|
||||
}
|
||||
return final_commit_name;
|
||||
return xstrdup_or_null(final_commit_name);
|
||||
}
|
||||
|
||||
static const char *prepare_initial(struct scoreboard *sb)
|
||||
static char *prepare_initial(struct scoreboard *sb)
|
||||
{
|
||||
int i;
|
||||
const char *final_commit_name = NULL;
|
||||
|
@ -2445,7 +2445,7 @@ static const char *prepare_initial(struct scoreboard *sb)
|
|||
}
|
||||
if (!final_commit_name)
|
||||
die("No commit to dig down to?");
|
||||
return final_commit_name;
|
||||
return xstrdup(final_commit_name);
|
||||
}
|
||||
|
||||
static int blame_copy_callback(const struct option *option, const char *arg, int unset)
|
||||
|
@ -2489,7 +2489,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
|
|||
struct origin *o;
|
||||
struct blame_entry *ent = NULL;
|
||||
long dashdash_pos, lno;
|
||||
const char *final_commit_name = NULL;
|
||||
char *final_commit_name = NULL;
|
||||
enum object_type type;
|
||||
|
||||
static struct string_list range_list;
|
||||
|
@ -2786,6 +2786,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
|
|||
|
||||
assign_blame(&sb, opt);
|
||||
|
||||
free(final_commit_name);
|
||||
|
||||
if (incremental)
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in a new issue