summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Harring <ferringb@gmail.com>2012-01-03 05:46:03 -0800
committerJunio C Hamano <gitster@pobox.com>2012-01-03 12:13:28 -0800
commit54440e154f33678a80ea9f77085730b81a5e9446 (patch)
treeb78597fad5116212617d606beab521ca58ed011b
parentf3f778df6900881a7bac409c927931c32b82bcb5 (diff)
downloadgit-54440e154f33678a80ea9f77085730b81a5e9446.tar.gz
fix hang in git fetch if pointed at a 0 length bundle
git-repo if interupted at the exact wrong time will generate zero length bundles- literal empty files. git-repo is wrong here, but git fetch shouldn't effectively spin loop if pointed at a zero length bundle. Signed-off-by: Brian Harring <ferringb@chromium.org> Helped-by: Johannes Sixt Helped-by: Nguyen Thai Ngoc Duy Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--bundle.c4
-rwxr-xr-xt/t5704-bundle.sh6
2 files changed, 8 insertions, 2 deletions
diff --git a/bundle.c b/bundle.c
index 08020bc3a2..8a1d53ba29 100644
--- a/bundle.c
+++ b/bundle.c
@@ -31,8 +31,8 @@ static int strbuf_readline_fd(struct strbuf *sb, int fd)
while (1) {
char ch;
ssize_t len = xread(fd, &ch, 1);
- if (len < 0)
- return -1;
+ if (len <= 0)
+ return len;
strbuf_addch(sb, ch);
if (ch == '\n')
break;
diff --git a/t/t5704-bundle.sh b/t/t5704-bundle.sh
index 728ccd88c3..4ae127d106 100755
--- a/t/t5704-bundle.sh
+++ b/t/t5704-bundle.sh
@@ -53,4 +53,10 @@ test_expect_failure 'bundle --stdin <rev-list options>' '
'
+test_expect_success 'empty bundle file is rejected' '
+
+ >empty-bundle && test_must_fail git fetch empty-bundle
+
+'
+
test_done