Skip to content
  • Jeff King's avatar
    clear parsed flag when we free tree buffers · 6e454b9a
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    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
    exceptions:
    
      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>
    6e454b9a