Skip to content

Commit

Permalink
blame.c: fix garbled error message
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lukas Fleischer authored and gitster committed Jan 13, 2015
1 parent 8c53f07 commit a46442f
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions builtin/blame.c
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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)
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit a46442f

Please sign in to comment.