]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
i_stream_read(): If stream_errno is set, fail immediately.
authorTimo Sirainen <tss@iki.fi>
Thu, 3 Apr 2014 09:54:18 +0000 (12:54 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 3 Apr 2014 09:54:18 +0000 (12:54 +0300)
Previously the stream_errno was reset to 0, but this required the istream
implementation to correctly set the stream_errno back, which wasn't often
done.

src/lib/istream.c

index 81843b487529552c597f5cde86bda9dc639fd058..e35513b65d92566a9a26a7bbc84188d788ec20eb 100644 (file)
@@ -152,13 +152,12 @@ ssize_t i_stream_read(struct istream *stream)
        size_t old_size;
        ssize_t ret;
 
-       if (unlikely(stream->closed)) {
+       if (unlikely(stream->closed || stream->stream_errno != 0)) {
                errno = stream->stream_errno;
                return -1;
        }
 
        stream->eof = FALSE;
-       stream->stream_errno = 0;
 
        if (_stream->parent != NULL)
                i_stream_seek(_stream->parent, _stream->parent_expected_offset);