tests: demonstrate "show --word-diff --color-moved" regression
commitb59ec03cb5f69d6a87dce8fc3ccbfd22d8de3c16
authorMichael J Gruber <git@grubix.eu>
Thu, 17 Mar 2022 14:55:34 +0000 (17 15:55 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 17 Mar 2022 15:49:07 +0000 (17 08:49 -0700)
treeeccfd9688adfc7019cc09ae659980d35b396fe30
parent759f34073807119ffb935a84aa86e6a8fa7a9bc4
tests: demonstrate "show --word-diff --color-moved" regression

Add a failing test which demonstrates a regression in
a18d66cefb ("diff.c: free "buf" in diff_words_flush()", 2022-03-04),
the regression is discussed in detail in the subsequent commit. With
it running `git show --word-diff --color-moved` with SANITIZE=address
would emit:

==31191==ERROR: AddressSanitizer: attempting double-free on 0x617000021100 in thread T0:
    #0 0x49f0a2 in free (git+0x49f0a2)
    #1 0x9b0e4d in diff_words_flush diff.c:2153:3
    #2 0x9aed5d in fn_out_consume diff.c:2354:3
    #3 0xe092ab in consume_one xdiff-interface.c:43:9
    #4 0xe072eb in xdiff_outf xdiff-interface.c:76:10
    #5 0xec7014 in xdl_emit_diffrec xdiff/xutils.c:53:6
    [...]

0x617000021100 is located 0 bytes inside of 768-byte region [0x617000021100,0x617000021400)
freed by thread T0 here:
    #0 0x49f0a2 in free (git+0x49f0a2)
    [...(same stacktrace)...]

previously allocated by thread T0 here:
    #0 0x49f603 in __interceptor_realloc (git+0x49f603)
    #1 0xde4da4 in xrealloc wrapper.c:126:8
    #2 0x995dc5 in append_emitted_diff_symbol diff.c:794:2
    #3 0x96c44a in emit_diff_symbol diff.c:1527:3
    [...]

This was not caught by the test suite because we test `diff
--word-diff --color-moved` only so far.

Therefore, add a test for `show`, too.

Signed-off-by: Michael J Gruber <git@grubix.eu>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t4015-diff-whitespace.sh