From: Markus Armbruster Date: Sun, 11 Mar 2012 10:43:38 +0000 (+0100) Subject: Flush all output before reading a login command, not just some X-Git-Tag: v4.3.30~33 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=d381351c6521552eb901160a982c53c40c63c769 Flush all output before reading a login command, not just some Before, a client could theoretically make the output queue grow without bounds. --- 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) {