Diff options
| author | Bryce Kwon <bryce@brycekwon.com> | |
|---|---|---|
| committer | Bryce Kwon <bryce@brycekwon.com> | |
| commit | ||
| parent | ||
| tree | ||
| download | ||
Pin the listing's blame link for a late NUL
The listing judges binary by the first 8000 bytes, as git does, while
the blame page and the file view look for a NUL anywhere, since one
past that window would end a Lua filter's output early. The listing
keeps the cheap sniff, because the whole-blob check would inflate
every blob it names, so a file whose NUL lies past the window gets a
blame link that ends on "Blob is binary". The test pins that trade, so
a change to either side has to face it.
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/t0104-tree.sh | 23 |
1 file changed, 23 insertions, 0 deletions
diff --git a/tests/t0104-tree.sh b/tests/t0104-tree.sh index d2f5234..5fdc6ac 100755 --- a/tests/t0104-tree.sh +++ b/tests/t0104-tree.sh @@ -318,4 +318,27 @@ test_expect_success 'a listing offers blame only where it works' ' ! grep "href=./bin/blame/big.bin.>blame</a>" tmp ' +# The listing sniffs only the window git judges binary by, while blame and +# the file view look for a NUL anywhere, so a file whose NUL lies past that +# window is offered a blame link that ends on the binary notice. Reading the +# whole of every blob would cost more than that link does. +test_expect_success 'a NUL past the first 8000 bytes still gets a blame link' ' + test_create_repo repos/late && + ( + cd repos/late && + test_seq 1 2000 >late.txt && + printf "\\000end\\n" >>late.txt && + git add late.txt && + git commit -m "late NUL" + ) && + cgitrc_repo laterc late enable-blame=1 && + cgit_ok laterc "url=late/tree/" >tmp && + test_grep "href=./late/blame/late.txt.>blame</a>" tmp && + cgit_ok laterc "url=late/blame/late.txt" >tmp && + test_grep "<div class=.error.>Blob is binary</div>" tmp && + cgit_ok laterc "url=late/tree/late.txt" >tmp && + test_grep "<table class=.bin-blob. tabindex=.0. aria-label=.Hex dump.>" tmp && + test_grep ! ">blame</a>" tmp +' + test_done |
