mirror of
https://github.com/git/git.git
synced 2024-11-28 04:23:30 +08:00
read-tree: stop leaking tree objects
The underlying problem is that the fill_tree_descriptor() API is easy to misuse, and this patch does not fix that. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
59efba64ac
commit
1ce584b058
@ -329,6 +329,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long
|
||||
{
|
||||
int i, ret, bottom;
|
||||
struct tree_desc t[MAX_UNPACK_TREES];
|
||||
void *buf[MAX_UNPACK_TREES];
|
||||
struct traverse_info newinfo;
|
||||
struct name_entry *p;
|
||||
|
||||
@ -346,12 +347,16 @@ static int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long
|
||||
const unsigned char *sha1 = NULL;
|
||||
if (dirmask & 1)
|
||||
sha1 = names[i].sha1;
|
||||
fill_tree_descriptor(t+i, sha1);
|
||||
buf[i] = fill_tree_descriptor(t+i, sha1);
|
||||
}
|
||||
|
||||
bottom = switch_cache_bottom(&newinfo);
|
||||
ret = traverse_trees(n, t, &newinfo);
|
||||
restore_cache_bottom(&newinfo, bottom);
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
free(buf[i]);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user