Skip to content

Commit

Permalink
bundle: fix wrong check of read_header()'s return value & add tests
Browse files Browse the repository at this point in the history
If read_header() fails, it returns <0, not 0. Further, an open(/dev/null)
was not checked for errors.

Also, this adds two tests to make sure that the bundle file looks
correct, by checking if it has the header has the expected form, and that
the pack contains the right amount of objects.

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
dscho authored and Junio C Hamano committed Mar 7, 2007
1 parent 8839ac9 commit 8315588
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
4 changes: 3 additions & 1 deletion builtin-bundle.c
Expand Up @@ -404,6 +404,8 @@ static int unbundle(struct bundle_header *header, int bundle_fd,
if (verify_bundle(header, 0))
return -1;
dev_null = open("/dev/null", O_WRONLY);
if (dev_null < 0)
return error("Could not open /dev/null");
pid = fork_with_pipe(argv_index_pack, &bundle_fd, &dev_null);
if (pid < 0)
return error("Could not spawn index-pack");
Expand Down Expand Up @@ -440,7 +442,7 @@ int cmd_bundle(int argc, const char **argv, const char *prefix)

memset(&header, 0, sizeof(header));
if (strcmp(cmd, "create") &&
!(bundle_fd = read_header(bundle_file, &header)))
(bundle_fd = read_header(bundle_file, &header)) < 0)
return 1;

if (!strcmp(cmd, "verify")) {
Expand Down
21 changes: 21 additions & 0 deletions t/t5510-fetch.sh
Expand Up @@ -90,6 +90,13 @@ test_expect_success 'create bundle 1' '
git bundle create bundle1 master^..master
'

test_expect_success 'header of bundle looks right' '
head -n 1 "$D"/bundle1 | grep "^#" &&
head -n 2 "$D"/bundle1 | grep "^-[0-9a-f]\{40\} " &&
head -n 3 "$D"/bundle1 | grep "^[0-9a-f]\{40\} " &&
head -n 4 "$D"/bundle1 | grep "^$"
'

test_expect_success 'create bundle 2' '
cd "$D" &&
git bundle create bundle2 master~2..master
Expand All @@ -101,6 +108,20 @@ test_expect_failure 'unbundle 1' '
git fetch "$D/bundle1" master:master
'

test_expect_success 'bundle 1 has only 3 files ' '
cd "$D" &&
(
while read x && test -n "$x"
do
:;
done
cat
) <bundle1 >bundle.pack &&
git index-pack bundle.pack &&
verify=$(git verify-pack -v bundle.pack) &&
test 4 = $(echo "$verify" | wc -l)
'

test_expect_success 'unbundle 2' '
cd "$D/bundle" &&
git fetch ../bundle2 master:master &&
Expand Down

0 comments on commit 8315588

Please sign in to comment.