log-tree: make add_name_decoration a public function
commit662174d299a2221016a8756d35d485b576ebcec2
authorJeff King <peff@peff.net>
Tue, 26 Aug 2014 10:23:36 +0000 (26 06:23 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 26 Aug 2014 17:33:01 +0000 (26 10:33 -0700)
tree7e37fe41557373bd3d8bc2e347a6eb5a55188a08
parentd31f3ad23dd1aee3c3e1015a43b02b995c01a9a1
log-tree: make add_name_decoration a public function

The log-tree code keeps a "struct decoration" hash to show
text decorations for each commit during log traversals. It
makes this available to other files by providing global
access to the hash. This can result in other code adding
entries that do not conform to what log-tree expects.

For example, the bisect code adds its own "dist"
decorations to be shown. Originally the bisect code was
correct, but when the name_decoration code grew a new field
in eb3005e (commit.h: add 'type' to struct name_decoration,
2010-06-19), the bisect code was not updated. As a result,
the log-tree code can access uninitialized memory and even
segfault.

We can fix this by making name_decoration's adding function
public. If all callers use it, then any changes to struct
initialization only need to happen in one place (and because
the members come in as parameters, the compiler can notice a
caller who does not supply enough information).

As a bonus, this also means that the decoration hashes
created by the bisect code will use less memory (previously
we over-allocated space for the distance integer, but now we
format it into a temporary buffer and copy it to the final
flex-array).

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