diff --git a/src/lib-sieve/util/program-client-remote.c b/src/lib-sieve/util/program-client-remote.c index 1bc06c06231a81b6080ea4b3fdce5f77966c879a..0af3fc9bb65c3393aac62f542d826e56a9681333 100644 --- a/src/lib-sieve/util/program-client-remote.c +++ b/src/lib-sieve/util/program-client-remote.c @@ -86,8 +86,6 @@ static ssize_t program_client_istream_read(struct istream_private *stream) } } - if ( ret == 0 || (ret < 0 && !stream->parent->eof) ) break; - if ( stream->buffer != NULL && pos >= 1 ) { /* retain/hide potential return code at end of buffer */ reserved = ( stream->buffer[pos-1] == '\n' && pos > 1 ? 2 : 1 ); @@ -99,6 +97,8 @@ static ssize_t program_client_istream_read(struct istream_private *stream) } } + if ( ret == 0 || (ret < 0 && !stream->parent->eof) ) break; + if ( ret <= 0 && stream->parent->eof ) { /* Parent EOF and not more data to return; EOF here as well */ stream->istream.eof = TRUE;