changeset 22719:b35916412f38

lib: istream-multiplex - Return error if the last packet wasn't fully read
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 22 Dec 2017 15:10:00 +0200
parents 687aec32e0e5
children 2c86355ae261
files src/lib/istream-multiplex.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib/istream-multiplex.c	Fri Dec 22 15:07:28 2017 +0200
+++ b/src/lib/istream-multiplex.c	Fri Dec 22 15:10:00 2017 +0200
@@ -56,8 +56,15 @@
 {
 	struct multiplex_ichannel **channelp;
 	array_foreach_modifiable(&mstream->channels, channelp) {
-		if (*channelp != NULL) {
-			(*channelp)->istream.istream.eof = TRUE;
+		if (*channelp == NULL)
+			continue;
+
+		(*channelp)->istream.istream.eof = TRUE;
+		if (mstream->remain > 0) {
+			(*channelp)->istream.istream.stream_errno = EPIPE;
+			io_stream_set_error(&(*channelp)->istream.iostream,
+				"Unexpected EOF - %u bytes remaining in packet",
+				mstream->remain);
 		}
 	}
 }