• Jeff King's avatar
    clear parsed flag when we free tree buffers · 6e454b9a
    Jeff King authored
    Many code paths will free a tree object's buffer and set it
    to NULL after finishing with it in order to keep memory
    usage down during a traversal. However, out of 8 sites that
    do this, only one actually unsets the "parsed" flag back.
    Those sites that don't are setting a trap for later users of
    the tree object; even after calling parse_tree, the buffer
    will remain NULL, causing potential segfaults.
    It is not known whether this is triggerable in the current
    code. Most commands do not do an in-memory traversal
    followed by actually using the objects again. However, it
    does not hurt to be safe for future callers.
    In most cases, we can abstract this out to a
    "free_tree_buffer" helper. However, there are two
      1. The fsck code relies on the parsed flag to know that we
         were able to parse the object at one point. We can
         switch this to using a flag in the "flags" field.
      2. The index-pack code sets the buffer to NULL but does
         not free it (it is freed by a caller). We should still
         unset the parsed flag here, but we cannot use our
         helper, as we do not want to free the buffer.
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
reachable.c 6.13 KB