From 2f4b5973cedaeecc33537560a4da09da610f9d56 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Tue, 8 Jun 2010 06:28:25 +0200 Subject: [PATCH] Oops when mpr() is misused for printing partial lines Such misuse creates a bulletin with a partial line. The read command normally merges it with the next one, but if the bulletins are more than five seconds apart (clock jumped somehow), we get a bulletin header in the middle of a line. --- src/lib/subs/pr.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/subs/pr.c b/src/lib/subs/pr.c index 5548c9d8b..e707b1c94 100644 --- a/src/lib/subs/pr.c +++ b/src/lib/subs/pr.c @@ -500,8 +500,9 @@ pr_beep(void) } /* - * Print to country CN similar to printf(). - * Use printf-style FORMAT with the optional arguments. + * Print complete lines to country CN similar to printf(). + * Use printf-style FORMAT with the optional arguments. FORMAT must + * end with '\n'. * If CN is zero, don't print anything. * Else, if CN is the current player and we're not in the update, * print just like pr(). Else print into a bulletin. @@ -514,6 +515,7 @@ mpr(int cn, char *format, ...) char buf[4096]; va_list ap; + CANT_HAPPEN(!format[0] || format[strlen(format) - 1] != '\n'); if (!cn) return; va_start(ap, format); -- 2.43.0