This tests basic functionality and also exercises a bug noticed by Keith Packard, (prune_cache followed by add_index_entry can trigger an attempt to realloc a pointer into the middle of an allocated buffer). --- t/t3060-ls-files-with-head.sh | 53 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+), 0 deletions(-) create mode 100755 t/t3060-ls-files-with-head.sh On Tue, 02 Oct 2007 22:55:57 -0700, Junio C Hamano wrote: > > Thanks for catching this. This code originally was perfectly > Ok, but I broke it with the overlay_tree() change. Yeah, Keith and I were really scratching our heads as to how this hadn't caused more problems earlier. I wrote the test case below to explore the issue and found the recent overlay_tree change as you mention, and that made more sense. I didn't notice any existing --with-tree test case, so perhaps the patch below is useful. -Carl diff --git a/t/t3060-ls-files-with-head.sh b/t/t3060-ls-files-with-head.sh new file mode 100755 index 0000000..4ead08b --- /dev/null +++ b/t/t3060-ls-files-with-head.sh @@ -0,0 +1,53 @@ +#!/bin/sh +# +# Copyright (c) 2007 Carl D. Worth +# + +test_description='git ls-files test (--with-head). + +This test runs git ls-files --with-head and in particular in +a scenario known to trigger a crash with some versions of git. +' +. ./test-lib.sh + +# The bug we're exercising requires a fair number of entries in a +# sub-directory so that add_index_entry will trigger a realloc +echo file > expected +mkdir sub +for num in $(seq -f%04g 1 50); do + touch sub/file-$num + echo file-$num >> expected +done +git add . +git commit -m "add a bunch of files" + +# We remove them all so that we'll have something to add back with +# --with-head and so that we'll definitely be under the realloc size +# to trigger the bug. +rm -r sub +git commit -a -m "remove them all" + +# The bug also requires some entry before our directory so that +# prune_path will modify the_index.cache +mkdir a_directory_that_sorts_before_sub +touch a_directory_that_sorts_before_sub/file +mkdir sub +touch sub/file +git add . + +# We have to run from a sub-directory to trigger prune_path +cd sub + +# Then we finally get to run our --with-tree test +test_expect_success \ + 'git -ls-files --with-tree should succeed.' \ + 'git ls-files --with-tree=HEAD~1 >../output' + +cd .. +test_expect_success \ + 'git -ls-files --with-tree should add entries from named tree.' \ + 'diff output expected' + +test_done + + -- 1.5.3.3.131.g34c6d
Attachment:
pgpHePPMCLv7m.pgp
Description: PGP signature