bisect: always call setup_revisions after init_revisions
authorJeff King <peff@peff.net>
Thu, 16 Jun 2016 23:37:20 +0000 (19:37 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 17 Jun 2016 00:21:48 +0000 (17:21 -0700)
init_revisions() initializes the rev_info struct to default
values, and setup_revisions() parses any command-line
arguments and finalizes the struct.

In e22278c (bisect: display first bad commit without forking
a new process, 2009-05-28), a show_diff_tree() was added
that calls the former but not the latter. It doesn't have
any arguments to parse, but it still should do the
finalizing step.

This may have caused other minor bugs over the years, but it
became much more prominent after fe37a9c (pretty: allow
tweaking tabwidth in --expand-tabs, 2016-03-29). That leaves
the expected tab width as "-1", rather than the true default
of "8". When we see a commit with tabs to be expanded, we
end up trying to add (size_t)-1 spaces to a strbuf, which
complains about the integer overflow.

The fix is easy: just call setup_revisions() with no
arguments.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
bisect.c

index 8c6d843..07bf842 100644 (file)
--- a/bisect.c
+++ b/bisect.c
@@ -886,6 +886,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit)
        if (!opt.diffopt.output_format)
                opt.diffopt.output_format = DIFF_FORMAT_RAW;
 
+       setup_revisions(0, NULL, &opt, NULL);
        log_tree_commit(&opt, commit);
 }