From 74582aeb2fe0fd05cc0570c7224029c2c36154c1 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 21 Sep 2014 16:43:17 +0200 Subject: [PATCH] fix remaining getstrtoken uses without null-check. --- s/preview | 2 +- src/economy.c | 7 ++-- src/items.c | 16 ++++++---- src/kernel/build.c | 78 +++++++++++++++++++++++---------------------- src/kernel/config.c | 6 ++-- src/laws.c | 3 +- src/study.c | 3 +- 7 files changed, 64 insertions(+), 51 deletions(-) diff --git a/s/preview b/s/preview index b22b34e76..ff3a7c1ee 100755 --- a/s/preview +++ b/s/preview @@ -22,8 +22,8 @@ exit $2 # otherwise function build() { assert_dir $SOURCE cd $SOURCE -git pull || abort "failed to update source. do you have local changes?" [ -z $1 ] || git checkout $1 +git pull || abort "failed to update source. do you have local changes?" s/build || abort "build failed." } diff --git a/src/economy.c b/src/economy.c index 36ff16c75..965df6478 100644 --- a/src/economy.c +++ b/src/economy.c @@ -1820,7 +1820,8 @@ int make_cmd(unit * u, struct order *ord) cmistake(u, ord, 275, MSG_PRODUCE); } else { - direction_t d = get_direction(getstrtoken(), u->faction->locale); + const char * s = getstrtoken(); + direction_t d = s ? get_direction(s, u->faction->locale) : NODIRECTION; if (d != NODIRECTION) { build_road(r, u, m, d); } @@ -2058,6 +2059,7 @@ static void buy(unit * u, request ** buyorders, struct order *ord) const item_type *itype = NULL; const luxury_type *ltype = NULL; keyword_t kwd; + const char *s; if (u->ship && is_guarded(r, u, GUARD_CREWS)) { cmistake(u, ord, 69, MSG_INCOME); @@ -2133,7 +2135,8 @@ static void buy(unit * u, request ** buyorders, struct order *ord) /* die Menge der verkauften Güter merken */ a->data.i += n; - itype = finditemtype(getstrtoken(), u->faction->locale); + s = getstrtoken(); + itype = s ? finditemtype(s, u->faction->locale) : 0; if (itype != NULL) { ltype = resource2luxury(itype->rtype); if (ltype == NULL) { diff --git a/src/items.c b/src/items.c index 0ce2ecb8e..4c67894ab 100644 --- a/src/items.c +++ b/src/items.c @@ -35,16 +35,19 @@ use_studypotion(struct unit *u, const struct item_type *itype, int amount, struct order *ord) { if (init_order(u->thisorder) == K_STUDY) { - skill_t sk; - skill *sv; + skill_t sk = NOSKILL; + skill *sv = 0; + const char * s = getstrtoken(); - sk = get_skill(getstrtoken(), u->faction->locale); - sv = unit_skill(u, sk); + if (s) { + sk = get_skill(s, u->faction->locale); + sv = unit_skill(u, sk); + } if (sv && sv->level > 2) { /* TODO: message */ } - else if (study_cost(u, sk) > 0) { + else if (sk!=NOSKILL && study_cost(u, sk) > 0) { /* TODO: message */ } else { @@ -54,8 +57,9 @@ struct order *ord) a = a_add(&u->attribs, a_new(&at_learning)); } teach = (teaching_info *)a->data.v; - if (amount > MAXGAIN) + if (amount > MAXGAIN) { amount = MAXGAIN; + } teach->value += amount * 30; if (teach->value > MAXGAIN * 30) { teach->value = MAXGAIN * 30; diff --git a/src/kernel/build.c b/src/kernel/build.c index 44352e2c3..22ae245b4 100644 --- a/src/kernel/build.c +++ b/src/kernel/build.c @@ -90,47 +90,49 @@ ship *getship(const struct region * r) static void destroy_road(unit * u, int nmax, struct order *ord) { - direction_t d = get_direction(getstrtoken(), u->faction->locale); - unit *u2; - region *r = u->region; - short n = (short)nmax; + const char *s = getstrtoken(); + direction_t d = s ? get_direction(s, u->faction->locale) : NODIRECTION; + if (d == NODIRECTION) { + /* Die Richtung wurde nicht erkannt */ + cmistake(u, ord, 71, MSG_PRODUCE); + } else { + unit *u2; + region *r = u->region; + short road, n = (short)nmax; + + if (nmax > SHRT_MAX) { + n = SHRT_MAX; + } else if (nmax < 0) { + n = 0; + } - if (nmax > SHRT_MAX) - n = SHRT_MAX; - else if (nmax < 0) - n = 0; + for (u2 = r->units; u2; u2 = u2->next) { + if (u2->faction != u->faction && is_guard(u2, GUARD_TAX) + && cansee(u2->faction, u->region, u, 0) + && !alliedunit(u, u2->faction, HELP_GUARD)) { + cmistake(u, ord, 70, MSG_EVENT); + return; + } + } - for (u2 = r->units; u2; u2 = u2->next) { - if (u2->faction != u->faction && is_guard(u2, GUARD_TAX) - && cansee(u2->faction, u->region, u, 0) - && !alliedunit(u, u2->faction, HELP_GUARD)) { - cmistake(u, ord, 70, MSG_EVENT); - return; + road = rroad(r, d); + n = _min(n, road); + if (n != 0) { + region *r2 = rconnect(r, d); + int willdo = eff_skill(u, SK_ROAD_BUILDING, r) * u->number; + willdo = _min(willdo, n); + if (willdo == 0) { + /* TODO: error message */ + } + if (willdo > SHRT_MAX) + road = 0; + else + road = road - (short)willdo; + rsetroad(r, d, road); + ADDMSG(&u->faction->msgs, msg_message("destroy_road", + "unit from to", u, r, r2)); + } } - } - - if (d == NODIRECTION) { - /* Die Richtung wurde nicht erkannt */ - cmistake(u, ord, 71, MSG_PRODUCE); - } else { - short road = rroad(r, d); - n = _min(n, road); - if (n != 0) { - region *r2 = rconnect(r, d); - int willdo = eff_skill(u, SK_ROAD_BUILDING, r) * u->number; - willdo = _min(willdo, n); - if (willdo == 0) { - /* TODO: error message */ - } - if (willdo > SHRT_MAX) - road = 0; - else - road = road - (short)willdo; - rsetroad(r, d, road); - ADDMSG(&u->faction->msgs, msg_message("destroy_road", - "unit from to", u, r, r2)); - } - } } int destroy_cmd(unit * u, struct order *ord) diff --git a/src/kernel/config.c b/src/kernel/config.c index 6cd0b3725..b368108b5 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -1127,7 +1127,8 @@ unsigned int getuint(void) int getint(void) { - return atoi(getstrtoken()); + const char * s = getstrtoken(); + return s ? atoi(s) : 0; } const struct race *findrace(const char *s, const struct locale *lang) @@ -1199,7 +1200,8 @@ bool isparam(const char *s, const struct locale * lang, param_t param) param_t getparam(const struct locale * lang) { - return findparam(getstrtoken(), lang); + const char *s = getstrtoken(); + return s ? findparam(s, lang) : NOPARAM; } faction *findfaction(int n) diff --git a/src/laws.c b/src/laws.c index 382aaa72d..602adf816 100755 --- a/src/laws.c +++ b/src/laws.c @@ -2127,9 +2127,10 @@ int mail_cmd(unit * u, struct order *ord) int banner_cmd(unit * u, struct order *ord) { init_order(ord); + const char * s = getstrtoken(); free(u->faction->banner); - u->faction->banner = _strdup(getstrtoken()); + u->faction->banner = s ? _strdup(s) : 0; add_message(&u->faction->msgs, msg_message("changebanner", "value", u->faction->banner)); diff --git a/src/study.c b/src/study.c index 7c733ff87..6adae692c 100644 --- a/src/study.c +++ b/src/study.c @@ -59,7 +59,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. static skill_t getskill(const struct locale *lang) { - return get_skill(getstrtoken(), lang); + const char * s = getstrtoken(); + return s ? get_skill(s, lang) : NOSKILL; } magic_t getmagicskill(const struct locale * lang)