From d381351c6521552eb901160a982c53c40c63c769 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 11 Mar 2012 11:43:38 +0100 Subject: [PATCH] Flush all output before reading a login command, not just some Before, a client could theoretically make the output queue grow without bounds. --- src/lib/player/login.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/player/login.c b/src/lib/player/login.c index db517e354..31afa27af 100644 --- a/src/lib/player/login.c +++ b/src/lib/player/login.c @@ -87,7 +87,11 @@ player_login(void *ud) pr_id(player, C_INIT, "Empire server ready\n"); for (;;) { - io_output(player->iop, (time_t)-1); + if (io_outputwaiting(player->iop)) { + if (io_output(player->iop, (time_t)-1) <= 0) + break; + continue; + } if (io_gets(player->iop, buf, sizeof(buf)) < 0) { res = io_input(player->iop, player->curup + minutes(max_idle)); if (res <= 0) { -- 2.43.0