object_array: use object_array_clear(), not free()
Instead of freeing `foo.objects` for an object array `foo` (sometimes conditionally), call `object_array_clear(&foo)`. This means we don't poke as much into the implementation, which is already a good thing, but also that we release the individual entries as well, thereby fixing at least one memory-leak (in diff-lib.c). If someone is holding on to a pointer to an element's `name` or `path`, that is now a dangling pointer, i.e., we'd be turning an unpleasant situation into an outright bug. To the best of my understanding no such long-term pointers are being taken. The way we handle `study` in builting/reflog.c still looks like it might leak. That will be addressed in the next commit. Signed-off-by: Martin Ågren <martin.agren@gmail.com> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
b2ccdf7fc1
commit
dcb572ab94
@ -549,7 +549,6 @@ int index_differs_from(const char *def, int diff_flags,
|
||||
rev.diffopt.flags |= diff_flags;
|
||||
rev.diffopt.ita_invisible_in_index = ita_invisible_in_index;
|
||||
run_diff_index(&rev, 1);
|
||||
if (rev.pending.alloc)
|
||||
free(rev.pending.objects);
|
||||
object_array_clear(&rev.pending);
|
||||
return (DIFF_OPT_TST(&rev.diffopt, HAS_CHANGES) != 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user