From ade364fa1d291190ca8388804ac3a8c36cb43e41 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 26 Mar 2006 12:54:52 +0000 Subject: [PATCH] (prunits, prplanes): Simplify, compute relation string instead of format. (prplanes): Fix dangerous misuse of pr(): passed formatted string instead of format string and arguments. Crash bug if formatted string contains '%'. Players can put that in country names... --- src/lib/commands/spy.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib/commands/spy.c b/src/lib/commands/spy.c index 01c632f3..7f7ad731 100644 --- a/src/lib/commands/spy.c +++ b/src/lib/commands/spy.c @@ -296,7 +296,7 @@ prunits(int x, int y) { struct lndstr land; struct nstr_item ni; - s_char report[128]; + char report[128]; snxtitem_xy(&ni, EF_LAND, x, y); while (nxtitem(&ni, &land)) { @@ -311,16 +311,17 @@ prunits(int x, int y) } if ((land.lnd_own != player->cnum) && land.lnd_own) { int rel; - s_char *format; + char *relstr; rel = getrel(getnatp(player->cnum), land.lnd_own); if (rel == ALLIED) - format = "Allied (%s) unit in %s: "; + relstr = "Allied"; else if (rel == FRIENDLY || rel == NEUTRAL) - format = "Neutral (%s) unit in %s: "; + relstr = "Neutral"; else - format = "Enemy (%s) unit in %s: "; - sprintf(report, format, cname(land.lnd_own), + relstr = "Enemy"; + sprintf(report, "%s (%s) unit in %s: ", + relstr, cname(land.lnd_own), xyas(land.lnd_x, land.lnd_y, player->cnum)); intelligence_report(player->cnum, &land, 3, report); } @@ -332,7 +333,6 @@ prplanes(int x, int y) { struct plnstr plane; struct nstr_item ni; - s_char report[128]; snxtitem_xy(&ni, EF_PLANE, x, y); while (nxtitem(&ni, &plane)) { @@ -344,19 +344,19 @@ prplanes(int x, int y) continue; if ((plane.pln_own != player->cnum) && plane.pln_own) { int rel; - s_char *format; + char *relstr; rel = getrel(getnatp(player->cnum), plane.pln_own); if (rel == ALLIED) - format = "Allied (%s) plane in %s: %s\n"; + relstr = "Allied"; else if (rel == FRIENDLY || rel == NEUTRAL) - format = "Neutral (%s) plane in %s: %s\n"; + relstr = "Neutral"; else - format = "Enemy (%s) plane in %s: %s\n"; - sprintf(report, format, cname(plane.pln_own), - xyas(plane.pln_x, plane.pln_y, player->cnum), - prplane(&plane)); - pr(report); + relstr = "Enemy"; + pr("%s (%s) plane in %s: %s\n", + relstr, cname(plane.pln_own), + xyas(plane.pln_x, plane.pln_y, player->cnum), + prplane(&plane)); } } }