]> git.pond.sub.org Git - empserver/commitdiff
(prunits, prplanes): Simplify, compute relation string instead of
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 26 Mar 2006 12:54:52 +0000 (12:54 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 26 Mar 2006 12:54:52 +0000 (12:54 +0000)
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

index 01c632f3ec70aedd7afc8eddac96e01ba3bf8509..7f7ad731be4c17e5c6fa393a69b8ca9c6aa598cb 100644 (file)
@@ -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));
        }
     }
 }