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;