traverse_trees(): use stack array for name entries
commit8dd40c0472a8f51f4fba4b8fd28dc3e9421cd7d7
authorJeff King <peff@peff.net>
Thu, 30 Jan 2020 09:53:38 +0000 (30 04:53 -0500)
committerJunio C Hamano <gitster@pobox.com>
Thu, 30 Jan 2020 21:55:30 +0000 (30 13:55 -0800)
treea1b1355b6075426f066cfca9c4ad0a4843c9398a
parent667b76ec5819b151355e322ad9c6264b9cb3f9cd
traverse_trees(): use stack array for name entries

We heap-allocate our arrays of name_entry structs, etc, with one entry
per tree we're asked to traverse. The code does a raw multiplication in
the xmalloc() call, which I find when auditing for integer overflows
during allocation.

We could "fix" this by using ALLOC_ARRAY() instead. But as it turns out,
the maximum size of these arrays is limited at compile time:

  - merge_trees() always passes in 3 trees

  - unpack_trees() and its brethren never pass in more than
    MAX_UNPACK_TREES

So we can simplify even further by just using a stack array and bounding
it with MAX_UNPACK_TREES. There should be no concern with overflowing
the stack, since MAX_UNPACK_TREES is only 8 and the structs themselves
are small.

Note that since we're replacing xcalloc(), we have to move one of the
NULL initializations into a loop.

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