stream_blob_to_fd: detect errors reading from stream
authorJeff King <peff@peff.net>
Mon, 25 Mar 2013 20:16:50 +0000 (16:16 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 Mar 2013 20:46:47 +0000 (13:46 -0700)
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>
streaming.c
index 4d978e54e4fb9d84e81977539ffa083534ef2968..f4126a7da5fb915b3d1df857b39ca9ab0ab6fb16 100644 (file)
@@ -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) {