Browse Source

[PATCH] Re-Fix SIGSEGV on unmerged files in git-diff-files -p

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>
maint
Junio C Hamano 20 years ago committed by Linus Torvalds
parent
commit
dc7090efbc
  1. 1
      diff.c
  2. 2
      diffcore.h

1
diff.c

@ -555,6 +555,7 @@ static void run_diff(const char *name, @@ -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

2
diffcore.h

@ -33,7 +33,7 @@ struct diff_filespec { @@ -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 */
};

Loading…
Cancel
Save