diff options
author | maxim <maxim@FreeBSD.org> | 2002-02-13 09:00:05 +0000 |
---|---|---|
committer | maxim <maxim@FreeBSD.org> | 2002-02-13 09:00:05 +0000 |
commit | 8b9c5f26cd26f5f8cbbd0372fc83114d59f39509 (patch) | |
tree | 6f8f18f3d098371ad67ee983e5f5535177cd0944 | |
parent | 8b3deee04d3fc111d2eee20e927e1a1af906b729 (diff) | |
download | FreeBSD-src-8b9c5f26cd26f5f8cbbd0372fc83114d59f39509.zip FreeBSD-src-8b9c5f26cd26f5f8cbbd0372fc83114d59f39509.tar.gz |
Fix infinite loop around sendfile(2) after sending >4GB file.
PR: bin/33770
Submitted by: Vladislav Shabanov <vs@rambler-co.ru>
Reviewed by: ru
Approved by: ru
MFC after: 1 month
-rw-r--r-- | libexec/ftpd/ftpd.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c index 60b1bf9..6c71150 100644 --- a/libexec/ftpd/ftpd.c +++ b/libexec/ftpd/ftpd.c @@ -1781,7 +1781,6 @@ send_data(FILE *instr, FILE *outstr, off_t blksize, off_t filesize, int isreg) { int c, filefd, netfd; char *buf; - size_t len; off_t cnt; transflag++; @@ -1824,17 +1823,16 @@ send_data(FILE *instr, FILE *outstr, off_t blksize, off_t filesize, int isreg) off_t offset; int err; - len = filesize; err = cnt = offset = 0; - while (err != -1 && cnt < filesize) { - err = sendfile(filefd, netfd, offset, len, + while (err != -1 && filesize > 0) { + err = sendfile(filefd, netfd, offset, 0, (struct sf_hdtr *) NULL, &cnt, 0); if (recvurg) goto got_oob; byte_count += cnt; offset += cnt; - len -= cnt; + filesize -= cnt; if (err == -1) { if (!cnt) |