Re: Bug: Segmentation fault in git diff
From: Đoàn Trần Công Danh <hidden>
Date: 2021-08-18 12:52:41
Subsystem:
the rest · Maintainer:
Linus Torvalds
On 2021-08-18 17:44:59+0700, Đoàn Trần Công Danh [off-list ref] wrote:
On 2021-08-18 10:42:45+0200, Thomas De Zeeuw [off-list ref] wrote:quoted
Hello, This is my first bug report to Git mailing list so let me know if more information is needed. Running the following command results in a segmentation fault on macOS arm64 $ git diff --name-only --diff-filter=U —relative Segmentation fault: 11MVCE: ---- 8< --- #!/bin/sh rm -rf /tmp/diff-bug git init /tmp/diff-bug cd /tmp/diff-bug mkdir -p dir printf '%s\n' one two three >file printf '%s\n' inner >dir/file git add file dir/file git commit -m first git branch side printf '%s\n' one two >file git add file git commit -m checkpoint git tag checkpoint git switch side printf '%s\n' two two four >file git add file git commit -m side cd dir git rebase checkpoint git diff --name-only --relative ---- >8 ----- It's NULL pointer dereference bug because pair is NULL. I haven't check further: ---- 8< ----- #0 run_diff_files (revs=revs@entry=0x7ffcc85ae270, option=option@entry=0) at diff-lib.c:196 196 pair->two->mode = wt_mode; ----- >8 -----
This diff could fix the issue, and the test suite still passes: ---- 8< ----
diff --git a/diff-lib.c b/diff-lib.c
index f9eadc4fc1..8f303958dd 100644
--- a/diff-lib.c
+++ b/diff-lib.c@@ -192,7 +192,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option) * from the desired stage. */ pair = diff_unmerge(&revs->diffopt, ce->name); - if (wt_mode) + if (pair && wt_mode) pair->two->mode = wt_mode; if (ce_stage(ce) != diff_unmerged_stage) continue; ---- >8 -----
--
Danh