aboutsummaryrefslogtreecommitdiffstats
path: root/streaming.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2013-03-25 16:16:50 -0400
committerJunio C Hamano <gitster@pobox.com>2013-03-27 13:46:47 -0700
commit45d4bdae5906cfe6b7cb1ba1cec82fd80381e07e (patch)
tree1ff97a633a56df704998bdc7ec41c15ee18e05fa /streaming.c
parent7632cd274464d693c3821205f72a54cda2b7d83b (diff)
downloadgit-45d4bdae5906cfe6b7cb1ba1cec82fd80381e07e.tar.gz
stream_blob_to_fd: detect errors reading from stream
We call read_istream, but never check its return value for errors. This can lead to us looping infinitely, as we just keep trying to write "-1" bytes (and we do not notice the error, as we simply check that write_in_full reports the same number of bytes we fed it, which of course is also -1). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'streaming.c')
-rw-r--r--streaming.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/streaming.c b/streaming.c
index 4d978e54e4..f4126a7da5 100644
--- a/streaming.c
+++ b/streaming.c
@@ -514,6 +514,8 @@ int stream_blob_to_fd(int fd, unsigned const char *sha1, struct stream_filter *f
ssize_t wrote, holeto;
ssize_t readlen = read_istream(st, buf, sizeof(buf));
+ if (readlen < 0)
+ goto close_and_exit;
if (!readlen)
break;
if (can_seek && sizeof(buf) == readlen) {