mirror of
https://github.com/git/git
synced 2024-11-05 01:58:18 +00:00
Merge branch 'ds/line-log-asan-fix'
Use after free and double freeing at the end in "git log -L... -p" had been identified and fixed. * ds/line-log-asan-fix: line-log: protect inner strbuf from free
This commit is contained in:
commit
d29d644d18
2 changed files with 32 additions and 6 deletions
10
line-log.c
10
line-log.c
|
@ -897,13 +897,13 @@ static void print_line(const char *prefix, char first,
|
|||
fputs("\\ No newline at end of file\n", file);
|
||||
}
|
||||
|
||||
static char *output_prefix(struct diff_options *opt)
|
||||
static const char *output_prefix(struct diff_options *opt)
|
||||
{
|
||||
if (opt->output_prefix) {
|
||||
struct strbuf *sb = opt->output_prefix(opt, opt->output_prefix_data);
|
||||
return sb->buf;
|
||||
} else {
|
||||
return xstrdup("");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -916,7 +916,7 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang
|
|||
struct diff_ranges *diff = &range->diff;
|
||||
|
||||
struct diff_options *opt = &rev->diffopt;
|
||||
char *prefix = output_prefix(opt);
|
||||
const char *prefix = output_prefix(opt);
|
||||
const char *c_reset = diff_get_color(opt->use_color, DIFF_RESET);
|
||||
const char *c_frag = diff_get_color(opt->use_color, DIFF_FRAGINFO);
|
||||
const char *c_meta = diff_get_color(opt->use_color, DIFF_METAINFO);
|
||||
|
@ -1003,7 +1003,6 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang
|
|||
out:
|
||||
free(p_ends);
|
||||
free(t_ends);
|
||||
free(prefix);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1012,10 +1011,9 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang
|
|||
*/
|
||||
static void dump_diff_hacky(struct rev_info *rev, struct line_log_data *range)
|
||||
{
|
||||
char *prefix = output_prefix(&rev->diffopt);
|
||||
const char *prefix = output_prefix(&rev->diffopt);
|
||||
|
||||
fprintf(rev->diffopt.file, "%s\n", prefix);
|
||||
free(prefix);
|
||||
|
||||
while (range) {
|
||||
dump_diff_hacky_one(rev, range);
|
||||
|
|
|
@ -337,4 +337,32 @@ test_expect_success 'zero-width regex .* matches any function name' '
|
|||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'show line-log with graph' '
|
||||
qz_to_tab_space >expect <<-EOF &&
|
||||
* $head_oid Modify func2() in file.c
|
||||
|Z
|
||||
| diff --git a/file.c b/file.c
|
||||
| --- a/file.c
|
||||
| +++ b/file.c
|
||||
| @@ -6,4 +6,4 @@
|
||||
| int func2()
|
||||
| {
|
||||
| - return F2;
|
||||
| + return F2 + 2;
|
||||
| }
|
||||
* $root_oid Add func1() and func2() in file.c
|
||||
ZZ
|
||||
diff --git a/file.c b/file.c
|
||||
--- /dev/null
|
||||
+++ b/file.c
|
||||
@@ -0,0 +6,4 @@
|
||||
+int func2()
|
||||
+{
|
||||
+ return F2;
|
||||
+}
|
||||
EOF
|
||||
git log --graph --oneline -L:func2:file.c >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue