From 70c27283d11283c35f3ec9fbe0c55e982a03c531 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@dovecot.fi> Date: Thu, 7 Jul 2016 10:15:15 +0200 Subject: [PATCH] lib-sieve: program client: Fixed bug in handling of result code from remote program (script service). It was sometimes passed through as data, meaning that the result code was missed. This transiently resulted in programs seemingly returning invalid result codes, causing an error. --- src/lib-sieve/util/program-client-remote.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib-sieve/util/program-client-remote.c b/src/lib-sieve/util/program-client-remote.c index 1bc06c062..0af3fc9bb 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; -- GitLab