diff options
author | Brandon Casey <drafnel@gmail.com> | 2011-01-06 03:30:01 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-01-06 23:21:49 +0300 |
commit | e83c267f71dfef72926807cd69aa8d570e57714e (patch) | |
tree | 897a5901a620548c880186b0566ee7c836888244 | |
parent | 685e9d9145a186a4b2036ecf2be73cc86d99a9b7 (diff) |
trace.c: ensure NULL is not passed to printf
GNU printf, and many others, will print the string "(null)" if a NULL
pointer is passed as the argument to a "%s" format specifier. Some
implementations (like on Solaris) do not detect a NULL pointer and will
produce a segfault in this case.
So, fix this by ensuring that pointer variables do not contain the value
NULL. Assign the string "(null)" to the variables are NULL.
Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | trace.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -154,6 +154,7 @@ static const char *quote_crnl(const char *path) /* FIXME: move prefix to startup_info struct and get rid of this arg */ void trace_repo_setup(const char *prefix) { + const char *git_work_tree; char cwd[PATH_MAX]; char *trace = getenv("GIT_TRACE"); @@ -164,8 +165,14 @@ void trace_repo_setup(const char *prefix) if (!getcwd(cwd, PATH_MAX)) die("Unable to get current working directory"); + if (!(git_work_tree = get_git_work_tree())) + git_work_tree = "(null)"; + + if (!prefix) + prefix = "(null)"; + trace_printf("setup: git_dir: %s\n", quote_crnl(get_git_dir())); - trace_printf("setup: worktree: %s\n", quote_crnl(get_git_work_tree())); + trace_printf("setup: worktree: %s\n", quote_crnl(git_work_tree)); trace_printf("setup: cwd: %s\n", quote_crnl(cwd)); trace_printf("setup: prefix: %s\n", quote_crnl(prefix)); } |