On 2021-08-18 17:44:59+0700, Đoàn Trần Công Danh <congdanhqx@xxxxxxxxx> wrote: > On 2021-08-18 10:42:45+0200, Thomas De Zeeuw <thomas@xxxxxxxxxx> wrote: > > 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: 11 > > MVCE: > > ---- 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