Code

trace.c: ensure NULL is not passed to printf
authorBrandon Casey <drafnel@gmail.com>
Thu, 6 Jan 2011 00:30:01 +0000 (18:30 -0600)
committerJunio C Hamano <gitster@pobox.com>
Thu, 6 Jan 2011 20:21:49 +0000 (12:21 -0800)
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>
trace.c

diff --git a/trace.c b/trace.c
index 02279b82c48eeb9b6e084b10dc2646eec5efbc01..35d388dce44a4a8e3d6053dfd6abcb652771818a 100644 (file)
--- a/trace.c
+++ b/trace.c
@@ -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));
 }