dovecot-2.2: istream-sized: Fail read() also when the stream is ...
dovecot at dovecot.org
dovecot at dovecot.org
Sun Sep 22 07:20:24 EEST 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/5b1aac85eb17
changeset: 16817:5b1aac85eb17
user: Timo Sirainen <tss at iki.fi>
date: Sun Sep 22 07:19:39 2013 +0300
description:
istream-sized: Fail read() also when the stream is larger than it should have been.
diffstat:
src/lib/istream-sized.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diffs (34 lines):
diff -r afc8c800f6ca -r 5b1aac85eb17 src/lib/istream-sized.c
--- a/src/lib/istream-sized.c Sun Sep 22 06:30:47 2013 +0300
+++ b/src/lib/istream-sized.c Sun Sep 22 07:19:39 2013 +0300
@@ -8,6 +8,7 @@
struct istream_private istream;
uoff_t size;
+ bool failed;
};
static ssize_t i_stream_sized_read(struct istream_private *stream)
@@ -18,6 +19,12 @@
ssize_t ret;
size_t pos;
+ if (sstream->failed) {
+ /* avoid duplicate errors */
+ stream->istream.stream_errno = EINVAL;
+ return -1;
+ }
+
if (stream->istream.v_offset +
(stream->pos - stream->skip) >= sstream->size) {
stream->istream.eof = TRUE;
@@ -56,6 +63,9 @@
stream->iostream.error);
pos = left;
stream->istream.eof = TRUE;
+ stream->istream.stream_errno = EINVAL;
+ sstream->failed = TRUE;
+ return -1;
} else if (!stream->istream.eof) {
/* still more to read */
} else if (stream->istream.stream_errno == ENOENT) {
More information about the dovecot-cvs
mailing list