diff --git a/src/chunk.c b/src/chunk.c index 73468a7b..206f1d7d 100644 --- a/src/chunk.c +++ b/src/chunk.c @@ -1155,9 +1155,11 @@ chunkqueue_small_resp_optim (chunkqueue * const restrict cq) ssize_t rd; offset = 0; /*(reuse offset var for offset into mem buffer)*/ do { - rd = read(fd, ptr+offset, len-offset); + rd = read(fd, ptr+offset, (size_t)len); } while (rd > 0 ? (offset += rd, len -= rd) : errno == EINTR); /*(contents of chunkqueue kept valid even if error reading from file)*/ + if (len) + cq->bytes_in -= len; buffer_commit(b, offset); filec->offset += offset; chunkqueue_remove_empty_chunks(cq); diff --git a/src/http_chunk.c b/src/http_chunk.c index 4e50b3d9..44e56a03 100644 --- a/src/http_chunk.c +++ b/src/http_chunk.c @@ -81,8 +81,8 @@ static int http_chunk_append_read_fd_range(request_st * const r, const buffer * ssize_t rd; offset = 0; do { - rd = read(fd, b->ptr+offset, len-offset); - } while (rd > 0 ? (offset += rd, len -= rd) : errno == EINTR); + rd = read(fd, b->ptr+offset, (size_t)(len-offset)); + } while (rd > 0 ? (offset += rd) != len : errno == EINTR); buffer_commit(b, offset); if (r->resp_send_chunked)