From 10736cd1574ee6b39a5cdb9c3618c2f932174839 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 27 Jun 2010 11:35:08 +0200 Subject: [PATCH] Don't write garbage to unused trade destination in trade file struct trdstr members trd_x, trd_y are used only for teleporting trades. For others, trad() wrote garbage coordinates to the trade file. They weren't used except by xdump. Fortunately, even there they're visible only to deities. Write invalid coordinates instead. Do that in set() as well, so that coordinates are valid only when we have a teleport destination. Spotted by the Clang Static Analyzer. --- include/trade.h | 2 +- src/lib/commands/set.c | 4 ++-- src/lib/commands/trad.c | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/trade.h b/include/trade.h index ffd86b4f0..b7ed5e37f 100644 --- a/include/trade.h +++ b/include/trade.h @@ -54,7 +54,7 @@ struct trdstr { long trd_price; int trd_maxbidder; time_t trd_markettime; - coord trd_x; + coord trd_x; /* destination for teleporting trade */ coord trd_y; }; diff --git a/src/lib/commands/set.c b/src/lib/commands/set.c index a557cf443..0f0880660 100644 --- a/src/lib/commands/set.c +++ b/src/lib/commands/set.c @@ -124,8 +124,8 @@ set(void) else id = ni_trade.cur; ef_blank(EF_TRADE, id, &trade); - trade.trd_x = item.gen.x; - trade.trd_y = item.gen.y; + trade.trd_x = 1; + trade.trd_y = 0; trade.trd_type = type; trade.trd_owner = player->cnum; trade.trd_unitid = ni.cur; diff --git a/src/lib/commands/trad.c b/src/lib/commands/trad.c index 64d0aed8b..6d22dab8f 100644 --- a/src/lib/commands/trad.c +++ b/src/lib/commands/trad.c @@ -177,11 +177,8 @@ trad(void) } } canspend = natp->nat_money - tally; - /* - * Find the destination sector for the plane before the trade is - * actually made, except for satellites in orbit. Must be owned - * and must be a 60% airfield (except for VTOL planes). - */ + + /* Find the destination sector for the trade */ if (((trade.trd_type == EF_PLANE) && !pln_is_in_orbit(&tg.plane)) || (trade.trd_type == EF_NUKE)) { while (1) { @@ -211,8 +208,7 @@ trad(void) } break; } - } - if (trade.trd_type == EF_LAND) { + } else if (trade.trd_type == EF_LAND) { while (1) { p = getstring("Destination sector: ", buf); if (!trade_check_ok(&trade, &tg)) @@ -238,6 +234,10 @@ trad(void) } break; } + } else { + /* This trade doesn't teleport; make destination invalid */ + sx = 1; + sy = 0; } p = getstring("How much do you bid: ", buf); -- 2.43.0