summaryrefslogtreecommitdiffstats
path: root/core/save-git.c
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2018-07-08 00:26:24 +0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-07-07 17:42:10 -0700
commit94d6e5d851dd72466ab6c7447391b0237040818b (patch)
tree6bf917009e56e3de45216dab3cb902b5dbe30962 /core/save-git.c
parent2de5b95acf65cf67db43783b9d308bd097fd7141 (diff)
downloadsubsurface-94d6e5d851dd72466ab6c7447391b0237040818b.tar.gz
save-git: allocate user_info members on the heap
subsurface_user_info() only works on Linux (linux.c), but it doesn't allocate values on the heap. Solve this ownership problem by always allocating .name and .email on the heap in subsurface_user_info() and freeing in the caller. If subsurface_user_info() did not modify any of the values from NULL, use default ones, but allocate them on the heap too. Ref #1346 Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
Diffstat (limited to 'core/save-git.c')
-rw-r--r--core/save-git.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/core/save-git.c b/core/save-git.c
index 3780399a0..8e5891969 100644
--- a/core/save-git.c
+++ b/core/save-git.c
@@ -1054,16 +1054,19 @@ static int get_authorship(git_repository *repo, git_signature **authorp)
if (git_signature_default(authorp, repo) == 0)
return 0;
#endif
- /* Default name information, with potential OS overrides */
- struct user_info user = {
- .name = "Subsurface",
- .email = "subsurface-app-account@subsurface-divelog.org"
- };
-
+ /* try to fetch the user info from the OS, otherwise use default values. */
+ struct user_info user = { .name = NULL, .email = NULL };
subsurface_user_info(&user);
+ if (!user.name)
+ user.name = strdup("Subsurface");
+ if (!user.email)
+ user.email = strdup("subsurface-app-account@subsurface-divelog.org");
/* git_signature_default() is too recent */
- return git_signature_now(authorp, user.name, user.email);
+ int ret = git_signature_now(authorp, user.name, user.email);
+ free((void *)user.name);
+ free((void *)user.email);
+ return ret;
}
static void create_commit_message(struct membuffer *msg, bool create_empty)