[PATCH] Re-Fix SIGSEGV on unmerged files in git-diff-files -p
authorJunio C Hamano <junkio@cox.net>
Mon, 13 Jun 2005 00:23:15 +0000 (17:23 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Mon, 13 Jun 2005 03:29:31 +0000 (20:29 -0700)
When an unmerged path was fed via diff_unmerged() into diffcore,
it eventually called run_diff() with "one" and "two" parameters
with NULL, but run_diff() was not written carefully enough to
notice this situation.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
diff.c
diffcore.h

diff --git a/diff.c b/diff.c
index 046d9a3..dd1c0b6 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -555,6 +555,7 @@ static void run_diff(const char *name,
 {
        const char *pgm = external_diff();
        if (!pgm &&
+           one && two &&
            DIFF_FILE_VALID(one) && DIFF_FILE_VALID(two) &&
            (S_IFMT & one->mode) != (S_IFMT & two->mode)) {
                /* a filepair that changes between file and symlink
index ac159d7..f1b5ca7 100644 (file)
@@ -33,7 +33,7 @@ struct diff_filespec {
                                  * if false, use the name and read from
                                  * the filesystem.
                                  */
-#define DIFF_FILE_VALID(spec) ((spec) && ((spec)->mode) != 0)
+#define DIFF_FILE_VALID(spec) (((spec)->mode) != 0)
        unsigned should_free : 1; /* data should be free()'ed */
        unsigned should_munmap : 1; /* data should be munmap()'ed */
 };