From: Timo Sirainen Date: Tue, 17 Dec 2013 19:33:32 +0000 (+0200) Subject: mail-filter: If filter returns 0 bytes, treat it as EIO error. X-Git-Tag: 2.2.10~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f9b1266bab6c443d440673abf40a362af944c678;p=thirdparty%2Fdovecot%2Fcore.git mail-filter: If filter returns 0 bytes, treat it as EIO error. --- diff --git a/src/plugins/mail-filter/istream-ext-filter.c b/src/plugins/mail-filter/istream-ext-filter.c index 0af40e59ae..9c2f260241 100644 --- a/src/plugins/mail-filter/istream-ext-filter.c +++ b/src/plugins/mail-filter/istream-ext-filter.c @@ -118,6 +118,13 @@ static ssize_t i_stream_mail_filter_read(struct istream_private *stream) if (!stream->istream.blocking) break; } + if (ret == -1 && !i_stream_have_bytes_left(&stream->istream) && + stream->istream.v_offset == 0) { + /* EOF without any input -> assume the script is repoting + failure. pretty ugly way, but currently there's no error + reporting channel. */ + stream->istream.stream_errno = EIO; + } return ret; } diff --git a/src/plugins/mail-filter/ostream-ext-filter.c b/src/plugins/mail-filter/ostream-ext-filter.c index 1afd7ba140..d0bbd1ec10 100644 --- a/src/plugins/mail-filter/ostream-ext-filter.c +++ b/src/plugins/mail-filter/ostream-ext-filter.c @@ -93,6 +93,14 @@ static int o_stream_mail_filter_flush(struct ostream_private *stream) } i_assert(ret == -1); + if (!i_stream_have_bytes_left(mstream->ext_in) && + mstream->ext_in->v_offset == 0) { + /* EOF without any input -> assume the script is repoting + failure. pretty ugly way, but currently there's no error + reporting channel. */ + stream->ostream.stream_errno = EIO; + return -1; + } if (mstream->ext_in->stream_errno != 0) { stream->ostream.stream_errno = mstream->ext_in->stream_errno; return -1;