summaryrefslogtreecommitdiff
path: root/refs.c
diff options
context:
space:
mode:
authorBrandon Casey <drafnel@gmail.com>2011-10-08 03:20:20 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-10-10 17:05:07 (GMT)
commit43d20a8c50355f7f68548e91bd8822c3cbfff52f (patch)
treef938cfb2de8b76ead888f04278bb415c8e57f3a4 /refs.c
parente9c4c11165e48b8f3fe1b4fc4db513f8e57202fb (diff)
downloadgit-43d20a8c50355f7f68548e91bd8822c3cbfff52f.zip
git-43d20a8c50355f7f68548e91bd8822c3cbfff52f.tar.gz
git-43d20a8c50355f7f68548e91bd8822c3cbfff52f.tar.bz2
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 <casey@nrlssc.navy.mil> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs.c')
-rw-r--r--refs.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/refs.c b/refs.c
index 5835b40..c31b461 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);