Commit 1bbec26d2bbe1852ffb87d0bf9a3a1cabc4df53f

Patrick Steinhardt 2019-07-04T11:41:21

attr_file: completely initialize attribute sessions The function `git_attr_session__init` is currently only initializing setting up the attribute's session key by incrementing the repo-global key by one. Most notably, all other members of the `git_attr_session` struct are not getting initialized at all. So if one is to allocate a session on the stack and then calls `git_attr_session__init`, the session will still not be fully initialized. We have fared just fine with that until now as all users of the function have allocated the session structure as part of bigger structs with `calloc`, and thus its contents have been zero-initialized implicitly already. Fix this by explicitly zeroing out the session to enable allocation of sessions on the stack.

1
2
3
4
5
6
7
8
9
10
11
12
diff --git a/src/attr_file.c b/src/attr_file.c
index edcfbda..5583837 100644
--- a/src/attr_file.c
+++ b/src/attr_file.c
@@ -919,6 +919,7 @@ int git_attr_session__init(git_attr_session *session, git_repository *repo)
 {
 	assert(repo);
 
+	memset(session, 0, sizeof(*session));
 	session->key = git_atomic_inc(&repo->attr_session_key);
 
 	return 0;