From 74a69cf74cd849ea7063e683a339b3ee2b98b931 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Fri, 8 Apr 2011 21:06:56 +0200 Subject: [PATCH] Fix satellite to fail on bad conditional snxtsct() and snxtitem() fail when the condition argument is bad. satmap() didn't check for failure. Due to the way snxtsct() and snxtitem() work, bad condition arguments were reported and otherwise ignored. --- include/prototypes.h | 2 +- src/lib/commands/sate.c | 6 ++---- src/lib/subs/satmap.c | 29 +++++++++++++++++------------ 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/include/prototypes.h b/include/prototypes.h index eb9af47d..3619b5c4 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -585,7 +585,7 @@ extern int sarg_list(char *, int *, int); /* satmap.c */ extern void satdisp_sect(struct sctstr *, int); extern void satdisp_units(coord, coord); -extern void satmap(int, int, int, int, int, int); +extern int satmap(int, int, int, int, int, int); extern void sathead(void); /* sect.c */ extern void sct_postread(int, void *); diff --git a/src/lib/commands/sate.c b/src/lib/commands/sate.c index ae18e05c..a1273f7e 100644 --- a/src/lib/commands/sate.c +++ b/src/lib/commands/sate.c @@ -86,8 +86,6 @@ sate(void) pr("Satellite Map Report:\n"); pr("%s at ", prplane(&plane)); tech = techfact(plane.pln_tech, 20.0); - satmap(plane.pln_x, plane.pln_y, plane.pln_effic, - (int)tech, plchr[(int)plane.pln_type].pl_flags, type); - - return RET_OK; + return satmap(plane.pln_x, plane.pln_y, plane.pln_effic, + (int)tech, plchr[(int)plane.pln_type].pl_flags, type); } diff --git a/src/lib/subs/satmap.c b/src/lib/subs/satmap.c index 0de3c21e..06f016af 100644 --- a/src/lib/subs/satmap.c +++ b/src/lib/subs/satmap.c @@ -28,6 +28,7 @@ * * Known contributors to this file: * Steve McClure, 2000 + * Markus Armbruster, 2004-2011 */ #include @@ -50,7 +51,7 @@ static char **rad; static char *radbuf; -void +int satmap(int x, int y, int eff, int range, int flags, int type) { struct sctstr sect; @@ -68,7 +69,7 @@ satmap(int x, int y, int eff, int range, int flags, int type) char selection[1024]; if (!eff) - return; + return RET_OK; if (!radbuf) radbuf = malloc(WORLD_Y * MAPWIDTH(1)); @@ -82,7 +83,7 @@ satmap(int x, int y, int eff, int range, int flags, int type) if (!radbuf || !rad) { pr("Memory error in satmap, tell the deity.\n"); - return; + return RET_FAIL; } range = range * (eff / 100.0); @@ -100,9 +101,10 @@ satmap(int x, int y, int eff, int range, int flags, int type) sprintf(selection, "@%s:%d", xyas(x, y, player->cnum), range); if (type == EF_BAD || type == EF_SECTOR) { - if (type == EF_SECTOR) /* Use ?conditionals */ - snxtsct(&ns, selection); - else + if (type == EF_SECTOR) { /* Use ?conditionals */ + if (!snxtsct(&ns, selection)) + return RET_SYN; + } else snxtsct_dist(&ns, x, y, range); blankfill(radbuf, &ns.range, 1); @@ -143,9 +145,10 @@ satmap(int x, int y, int eff, int range, int flags, int type) if ((type == EF_BAD || type == EF_SHIP) && (flags & P_S || flags & P_I)) { - if (type == EF_SHIP) - snxtitem(&ni, EF_SHIP, selection, NULL); - else + if (type == EF_SHIP) { + if (!snxtitem(&ni, EF_SHIP, selection, NULL)) + return RET_SYN; + } else snxtitem_dist(&ni, EF_SHIP, x, y, range); crackle = count = 0; @@ -188,9 +191,10 @@ satmap(int x, int y, int eff, int range, int flags, int type) if ((type == EF_BAD || type == EF_LAND) && (flags & P_S || flags & P_I)) { - if (type == EF_LAND) - snxtitem(&ni, EF_LAND, selection, NULL); - else + if (type == EF_LAND) { + if (!snxtitem(&ni, EF_LAND, selection, NULL)) + return RET_SYN; + } else snxtitem_dist(&ni, EF_LAND, x, y, range); crackle = count = 0; @@ -247,6 +251,7 @@ satmap(int x, int y, int eff, int range, int flags, int type) pr("%s\n", rad[row]); pr("\n(c) 1989 Imaginative Images Inc.\n"); } + return RET_OK; } void