From 23c34fc77d8d83a9fc3bf2f3cf7178107f574b2e Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 29 Jul 2020 09:42:42 +1000 Subject: [PATCH] client: handle the case of zero data bytes When terminating the connection, we might get a read of zero Signed-off-by: Peter Hutterer --- src/libeis-client.c | 8 ++++++-- src/util-io.h | 6 +++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/libeis-client.c b/src/libeis-client.c index 0902706..d8b8cc8 100644 --- a/src/libeis-client.c +++ b/src/libeis-client.c @@ -401,10 +401,14 @@ client_dispatch(struct source *source, void *data) _cleanup_iobuf_ struct iobuf *buf = iobuf_new(64); int rc = iobuf_append_from_fd(buf, source_get_fd(source)); - if (rc == -EAGAIN) + if (rc == -EAGAIN) { return; - else if (rc < 0) + } else if (rc == 0) { + rc = -ECANCELED; goto error; + } else if (rc < 0) { + goto error; + } msg = client_parse_message(iobuf_data(buf), iobuf_len(buf)); if (!msg) { diff --git a/src/util-io.h b/src/util-io.h index 71e6e88..4a4d277 100644 --- a/src/util-io.h +++ b/src/util-io.h @@ -127,9 +127,9 @@ iobuf_append_from_fd(struct iobuf *buf, int fd) ssize_t rc; do { rc = xread(fd, data, sizeof(data)); - if (rc <= 0) { - if (rc == -EAGAIN) - return nread; + if (rc == 0 || rc == -EAGAIN) { + break; + } else if (rc < 0) { return rc; }