From: Brandon Casey Date: Sat, 8 Oct 2011 03:20:20 +0000 (-0500) Subject: refs.c: ensure struct whose member may be passed to realloc is initialized X-Git-Tag: v1.7.8-rc0~106^2~2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=43d20a8c50355f7f68548e91bd8822c3cbfff52f;p=git.git refs.c: ensure struct whose member may be passed to realloc is initialized The variable "refs" is allocated on the stack but is not initialized. It is passed to read_packed_refs(), and its struct members may eventually be passed to add_ref() and ALLOC_GROW(). Since the structure has not been initialized, its members may contain random non-zero values. So let's initialize it. The call sequence looks something like this: resolve_gitlink_packed_ref(...) { struct cached_refs refs; ... read_packed_refs(f, &refs); ... } read_packed_refs(FILE*, struct cached_refs *cached_refs) { ... add_ref(name, sha1, flag, &cached_refs->packed, &last); ... } add_ref(..., struct ref_array *refs, struct ref_entry **) { ... ALLOC_GROW(refs->refs, refs->nr + 1, refs->alloc); } Signed-off-by: Brandon Casey Signed-off-by: Junio C Hamano --- diff --git a/refs.c b/refs.c index 5835b40b0..c31b46166 100644 --- a/refs.c +++ b/refs.c @@ -360,6 +360,7 @@ static int resolve_gitlink_packed_ref(char *name, int pathlen, const char *refna f = fopen(name, "r"); if (!f) return -1; + memset(&refs, 0, sizeof(refs)); read_packed_refs(f, &refs); fclose(f); ref = search_ref_array(&refs.packed, refname);