From b65b451dde9d68a3b5bee77d99124a2d00c2c842 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 16 Jun 2024 13:25:29 +0200 Subject: [PATCH] fix some static analysis flags. --- src/gmtool.c | 2 +- src/kernel/order.c | 22 +++++++++++----------- src/kernel/region.c | 1 + src/kernel/save.c | 4 ++-- src/move.c | 19 +++++++++++++------ src/reports.c | 2 +- src/study.c | 2 +- src/tests.c | 4 +++- src/util/unicode.c | 3 --- 9 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/gmtool.c b/src/gmtool.c index 1db793c6c..c57328e25 100644 --- a/src/gmtool.c +++ b/src/gmtool.c @@ -1142,7 +1142,7 @@ static void show_help(void) "s: seed next player from newfactions at current region", "A: reset area (set region age to 0) for whole contiguos region", "c: clear (reset resources) region under cursor", - "C: clear rectangle under cursor (2 regions up and to the right)" + "C: clear rectangle under cursor (2 regions up and to the right)", "", "h: mark regions ... n: none, i: island under cursor, t: terrain type, s: with ships,", " u: with units, p: with player units, m: with monsters, f: with units of a faction,", diff --git a/src/kernel/order.c b/src/kernel/order.c index f46edfc6f..d81648477 100644 --- a/src/kernel/order.c +++ b/src/kernel/order.c @@ -128,28 +128,28 @@ char* get_command(const order *ord, const struct locale *lang, char *sbuffer, si const char *str = (const char *)LOC(lang, keyword(kwd)); assert(str); sbs_strcat(&sbs, str); - if (ord->id < 0) { - skill_t sk = (skill_t)(100+ord->id); + if (ord->id >= 0) { + order_data *od = odata_load(ord->id); + str = OD_STRING(od); + if (str) { + sbs_strcat(&sbs, " "); + sbs_strcat(&sbs, str); + } + odata_release(od); + } else if (100 + ord->id < MAXSKILLS) { + skill_t sk = (skill_t)(100 + ord->id); str = skillname(sk, lang); if (str) { if (strchr(str, ' ') == NULL) { sbs_strcat(&sbs, " "); sbs_strcat(&sbs, str); - } + } else { sbs_strcat(&sbs, " \""); sbs_strcat(&sbs, str); sbs_strcat(&sbs, "\""); } } - } else { - order_data *od = odata_load(ord->id); - str = OD_STRING(od); - if (str) { - sbs_strcat(&sbs, " "); - sbs_strcat(&sbs, str); - } - odata_release(od); } } return sbuffer; diff --git a/src/kernel/region.c b/src/kernel/region.c index d1432f39c..65ca04866 100644 --- a/src/kernel/region.c +++ b/src/kernel/region.c @@ -1213,6 +1213,7 @@ static void create_land(region *r) { setluxuries(r, nb[p].type); } } + arrfree(nb); } void terraform_region(region * r, const terrain_type * terrain) diff --git a/src/kernel/save.c b/src/kernel/save.c index a1bf9cdd8..62414215e 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -739,7 +739,6 @@ static void fix_resource_values(region* r) static void read_landregion(gamedata* data, region* r) { - char info[DISPLAYSIZE]; char name[NAMESIZE]; int n, i; r->land = calloc(1, sizeof(land_region)); @@ -752,9 +751,10 @@ static void read_landregion(gamedata* data, region* r) r->land->name = str_strdup(name); if (data->version >= LANDDISPLAY_VERSION) { + char info[DISPLAYSIZE]; read_regioninfo(data, r, info, sizeof(info)); + region_setinfo(r, info); } - region_setinfo(r, info); READ_INT(data->store, &i); if (i < 0) { log_error("number of trees in %s is %d.", regionname(r, NULL), i); diff --git a/src/move.c b/src/move.c index c60b5ceeb..3d7d11cf0 100644 --- a/src/move.c +++ b/src/move.c @@ -1395,13 +1395,20 @@ static bool roadto(const region * r, direction_t dir) } } - if (r->terrain->max_road <= 0) + if (r->terrain->max_road <= 0) { return false; - if (r2->terrain->max_road <= 0) + } + if (r2->terrain->max_road <= 0) { return false; - if (rroad(r, dir) < r->terrain->max_road) + } + if (rroad(r, dir) < r->terrain->max_road) { return false; - if (rroad(r2, dir_invert(dir)) < r2->terrain->max_road) + } + dir = dir_invert(dir); + if (dir >= MAXDIRECTIONS || dir == NODIRECTION) { + return false; + } + if (rroad(r2, dir) < r2->terrain->max_road) return false; return true; } @@ -1874,8 +1881,8 @@ void harbour_taxes(region *r, unit *captain, unit *harbourmaster) if (trans) { message *msg = msg_message("harbor_trade", "unit items ship", harbourmaster, trans, - u->ship); - add_message(&u->faction->msgs, msg); + sh); + add_message(&captain->faction->msgs, msg); add_message(&harbourmaster->faction->msgs, msg); msg_release(msg); while (trans) diff --git a/src/reports.c b/src/reports.c index 12c06ca3c..983a8367e 100644 --- a/src/reports.c +++ b/src/reports.c @@ -583,7 +583,7 @@ static void spskill(struct skill* sv, const struct unit *u, const struct locale if (sv->id == SK_MAGIC) { magic_t mtype = unit_get_magic(u); - if (mtype != M_GRAY) { + if (mtype != M_GRAY && mtype != M_NONE) { sbs_strcat(sbp, magic_name(mtype, lang)); sbs_strcat(sbp, " "); } diff --git a/src/study.c b/src/study.c index 428b5022d..b65b2053b 100644 --- a/src/study.c +++ b/src/study.c @@ -308,7 +308,7 @@ int teach_cmd(unit * teacher, struct order *ord) /* Input ist nun von student->thisorder !! */ init_order(student->thisorder, student->faction->locale); sk = getskill(student->faction->locale); - if (sk != NOSKILL + if (sk != NOSKILL && sk < MAXSKILLS && effskill_study(teacher, sk) - TEACHDIFFERENCE >= effskill(student, sk, NULL)) { teaching -= teach_unit(teacher, student, teaching, sk, true, &academy_students); } diff --git a/src/tests.c b/src/tests.c index 7afcbcfc2..3492caf98 100644 --- a/src/tests.c +++ b/src/tests.c @@ -422,7 +422,9 @@ building_type * test_create_buildingtype(const char * name) if (btype->a_stages) { con = &btype->a_stages[0].construction; } else { - building_stage *stage = arraddnptr(btype->a_stages, 1); + building_stage *stage; + arrsetlen(btype->a_stages, 1); + stage = btype->a_stages; if (stage) { stage->name = NULL; con = &stage->construction; diff --git a/src/util/unicode.c b/src/util/unicode.c index 27ea61d93..81b68545d 100644 --- a/src/util/unicode.c +++ b/src/util/unicode.c @@ -77,9 +77,6 @@ utf8_decode(wchar_t * ucs4_character, const char * utf8_string, return EILSEQ; } *length = (size_t)size; - if (codepoint > WCHAR_MAX) { - return ENOMEM; - } *ucs4_character = (wchar_t)codepoint; return 0; }