From 37e68e5796e156deec7a47427ded2cb7a9ee3270 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 2 Jan 2016 10:11:28 +0100 Subject: [PATCH] client: Fix obscure misdetection of input EOF recv_input(input_fd, &inbuf) returns zero when @inbuf is full or @input_fd is at EOF. We avoid the former by putting @input_fd in @rdfd only when @inbuf has space, so we can detect EOF easily. But we missed the case where adding a cookie fills up @inbuf. We misinterpret "can't read into full buffer" as "EOF on input" then. Fix by checking for space again. Signed-off-by: Markus Armbruster --- src/client/play.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/play.c b/src/client/play.c index bc7f629b..89c2f66a 100644 --- a/src/client/play.c +++ b/src/client/play.c @@ -27,7 +27,7 @@ * play.c: Playing the game * * Known contributors to this file: - * Markus Armbruster, 2007-2015 + * Markus Armbruster, 2007-2016 * Ron Koenderink, 2007-2009 */ @@ -523,7 +523,7 @@ play(int sock) continue; /* read player input */ - if (FD_ISSET(input_fd, &rdfd)) { + if (FD_ISSET(input_fd, &rdfd) && ring_space(&inbuf)) { n = recv_input(input_fd, &inbuf); if (n <= 0) { if (input_fd) {