code analysis scan.

add checks for malloc results.
reduce stack size.
This commit is contained in:
Enno Rehling 2018-12-15 19:38:40 +01:00
parent a16c829218
commit 033070663a
36 changed files with 125 additions and 64 deletions

View File

@ -53,12 +53,12 @@ static const terrain_type *chaosterrain(void)
} }
} }
if (numtypes > 0) { if (numtypes > 0) {
int n = 0;
types = malloc(sizeof(terrain_type *) * numtypes); types = malloc(sizeof(terrain_type *) * numtypes);
if (!types) abort(); if (!types) abort();
numtypes = 0; for (terrain = terrains(); n != numtypes && terrain != NULL; terrain = terrain->next) {
for (terrain = terrains(); terrain != NULL; terrain = terrain->next) {
if ((terrain->flags & LAND_REGION) && terrain->herbs) { if ((terrain->flags & LAND_REGION) && terrain->herbs) {
types[numtypes++] = terrain; types[n++] = terrain;
} }
} }
} }

View File

@ -48,7 +48,8 @@ void add_donation(faction * f1, faction * f2, int amount, region * r)
tf->amount += amount; tf->amount += amount;
} }
else { else {
tf = malloc(sizeof(transfer)); tf = (transfer *)malloc(sizeof(transfer));
if (!tf) abort();
memcpy(tf, &tr, sizeof(transfer)); memcpy(tf, &tr, sizeof(transfer));
} }
selist_set_insert(&transfers, tf, cmp_transfer); selist_set_insert(&transfers, tf, cmp_transfer);

View File

@ -166,7 +166,8 @@ int expand_production(region * r, econ_request * requests, econ_request ***resul
if (norders > 0) { if (norders > 0) {
int i = 0; int i = 0;
econ_request **split; econ_request **split;
split = calloc(norders, sizeof(econ_request *)); split = (econ_request **)calloc(norders, sizeof(econ_request *));
if (!split) abort();
for (o = requests; o; o = o->next) { for (o = requests; o; o = o->next) {
if (o->qty > 0) { if (o->qty > 0) {
unsigned int j; unsigned int j;
@ -230,7 +231,8 @@ static recruitment *select_recruitment(econ_request ** rop,
while (rec && rec->f != u->faction) while (rec && rec->f != u->faction)
rec = rec->next; rec = rec->next;
if (rec == NULL) { if (rec == NULL) {
rec = malloc(sizeof(recruitment)); rec = (recruitment *)malloc(sizeof(recruitment));
if (!rec) abort();
rec->f = u->faction; rec->f = u->faction;
rec->total = 0; rec->total = 0;
rec->assigned = 0; rec->assigned = 0;
@ -563,6 +565,7 @@ static void recruit(unit * u, struct order *ord, econ_request ** recruitorders)
u_setrace(u, rc); u_setrace(u, rc);
u->wants = n; u->wants = n;
o = (econ_request *)calloc(1, sizeof(econ_request)); o = (econ_request *)calloc(1, sizeof(econ_request));
if (!o) abort();
o->qty = n; o->qty = n;
o->unit = u; o->unit = u;
o->type.recruit.ord = ord; o->type.recruit.ord = ord;
@ -940,7 +943,7 @@ typedef struct allocation {
unsigned int flags; unsigned int flags;
unit *unit; unit *unit;
} allocation; } allocation;
#define new_allocation() calloc(sizeof(allocation), 1) #define new_allocation() (allocation *)calloc(1, sizeof(allocation))
#define free_allocation(a) free(a) #define free_allocation(a) free(a)
typedef struct allocation_list { typedef struct allocation_list {
@ -1054,12 +1057,13 @@ static void allocate_resource(unit * u, const resource_type * rtype, int want)
while (alist && alist->type != rtype) while (alist && alist->type != rtype)
alist = alist->next; alist = alist->next;
if (!alist) { if (!alist) {
alist = calloc(sizeof(struct allocation_list), 1); alist = calloc(1, sizeof(struct allocation_list));
alist->next = allocations; alist->next = allocations;
alist->type = rtype; alist->type = rtype;
allocations = alist; allocations = alist;
} }
al = new_allocation(); al = new_allocation();
if (!al) abort();
al->want = amount; al->want = amount;
al->save = save_mod; al->save = save_mod;
al->next = alist->data; al->next = alist->data;
@ -1665,6 +1669,7 @@ static void buy(unit * u, econ_request ** buyorders, struct order *ord)
return; return;
} }
o = (econ_request *)calloc(1, sizeof(econ_request)); o = (econ_request *)calloc(1, sizeof(econ_request));
if (!o) abort();
o->type.trade.ltype = ltype; /* sollte immer gleich sein */ o->type.trade.ltype = ltype; /* sollte immer gleich sein */
o->unit = u; o->unit = u;
@ -2013,6 +2018,7 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
/* die Menge der verkauften G<>ter merken */ /* die Menge der verkauften G<>ter merken */
a->data.i += n; a->data.i += n;
o = (econ_request *)calloc(1, sizeof(econ_request)); o = (econ_request *)calloc(1, sizeof(econ_request));
if (!o) abort();
o->unit = u; o->unit = u;
o->qty = n; o->qty = n;
o->type.trade.ltype = ltype; o->type.trade.ltype = ltype;
@ -2628,6 +2634,7 @@ void tax_cmd(unit * u, struct order *ord, econ_request ** taxorders)
* einheiten aufgeteilt. */ * einheiten aufgeteilt. */
o = (econ_request *)calloc(1, sizeof(econ_request)); o = (econ_request *)calloc(1, sizeof(econ_request));
if (!o) abort();
o->qty = u->wants / TAXFRACTION; o->qty = u->wants / TAXFRACTION;
o->unit = u; o->unit = u;
addlist(taxorders, o); addlist(taxorders, o);
@ -2693,6 +2700,7 @@ void loot_cmd(unit * u, struct order *ord, econ_request ** lootorders)
} }
o = (econ_request *)calloc(1, sizeof(econ_request)); o = (econ_request *)calloc(1, sizeof(econ_request));
if (!o) abort();
o->qty = u->wants / TAXFRACTION; o->qty = u->wants / TAXFRACTION;
o->unit = u; o->unit = u;
addlist(lootorders, o); addlist(lootorders, o);
@ -2700,7 +2708,7 @@ void loot_cmd(unit * u, struct order *ord, econ_request ** lootorders)
return; return;
} }
#define MAX_WORKERS 2048 #define MAX_WORKERS 512
void auto_work(region * r) void auto_work(region * r)
{ {
econ_request workers[MAX_WORKERS]; econ_request workers[MAX_WORKERS];

View File

@ -753,8 +753,9 @@ static void handle_modifier(parseinfo *pi, const XML_Char *el, const XML_Char **
} }
static construction *parse_construction(parseinfo *pi, const XML_Char *el, const XML_Char **attr) { static construction *parse_construction(parseinfo *pi, const XML_Char *el, const XML_Char **attr) {
construction *con = calloc(sizeof(construction), 1);
int i; int i;
construction *con = (construction *)calloc(1, sizeof(construction));
if (!con) abort();
con->maxsize = -1; con->maxsize = -1;
con->minskill = -1; con->minskill = -1;
con->reqsize = 1; con->reqsize = 1;
@ -1273,7 +1274,8 @@ static void start_buildings(parseinfo *pi, const XML_Char *el, const XML_Char **
} }
else if (xml_strequal(el, "construction")) { else if (xml_strequal(el, "construction")) {
assert(stage == NULL); assert(stage == NULL);
stage = calloc(1, sizeof(building_stage)); stage = (building_stage *)calloc(1, sizeof(building_stage));
if (!stage) abort();
stage->construction = parse_construction(pi, el, attr); stage->construction = parse_construction(pi, el, attr);
} }
else if (xml_strequal(el, "maintenance")) { else if (xml_strequal(el, "maintenance")) {
@ -1366,7 +1368,8 @@ static void end_spells(parseinfo *pi, const XML_Char *el) {
else if (xml_strequal(el, "spell")) { else if (xml_strequal(el, "spell")) {
spell *sp = (spell *)pi->object; spell *sp = (spell *)pi->object;
if (ncomponents > 0) { if (ncomponents > 0) {
sp->components = calloc(sizeof(spell_component), ncomponents + 1); sp->components = (spell_component *)calloc(ncomponents + 1, sizeof(spell_component));
if (!sp->components) abort();
memcpy(sp->components, components, sizeof(spell_component) * ncomponents); memcpy(sp->components, components, sizeof(spell_component) * ncomponents);
ncomponents = 0; ncomponents = 0;
} }
@ -1384,7 +1387,8 @@ static void end_weapon(parseinfo *pi, const XML_Char *el) {
else if (xml_strequal(el, "modifier")) { else if (xml_strequal(el, "modifier")) {
if (nwmods > 0) { if (nwmods > 0) {
weapon_type *wtype = rtype->wtype; weapon_type *wtype = rtype->wtype;
wtype->modifiers = calloc(sizeof(weapon_mod), nwmods + 1); wtype->modifiers = (weapon_mod *)calloc(nwmods + 1, sizeof(weapon_mod));
if (!wtype->modifiers) abort();
memcpy(wtype->modifiers, wmods, sizeof(weapon_mod) * nwmods); memcpy(wtype->modifiers, wmods, sizeof(weapon_mod) * nwmods);
nwmods = 0; nwmods = 0;
} }
@ -1395,7 +1399,8 @@ static void end_resources(parseinfo *pi, const XML_Char *el) {
resource_type *rtype = (resource_type *)pi->object; resource_type *rtype = (resource_type *)pi->object;
if (xml_strequal(el, "resource")) { if (xml_strequal(el, "resource")) {
if (nrmods > 0) { if (nrmods > 0) {
rtype->modifiers = calloc(sizeof(resource_mod), nrmods + 1); rtype->modifiers = (resource_mod *)calloc(nrmods + 1, sizeof(resource_mod));
if (!rtype->modifiers) abort();
memcpy(rtype->modifiers, rmods, sizeof(resource_mod) * nrmods); memcpy(rtype->modifiers, rmods, sizeof(resource_mod) * nrmods);
nrmods = 0; nrmods = 0;
} }
@ -1403,7 +1408,8 @@ static void end_resources(parseinfo *pi, const XML_Char *el) {
else if (xml_strequal(el, "construction")) { else if (xml_strequal(el, "construction")) {
if (nreqs > 0) { if (nreqs > 0) {
construction *con = rtype->itype->construction; construction *con = rtype->itype->construction;
con->materials = calloc(sizeof(requirement), nreqs + 1); con->materials = (requirement *)calloc(nreqs + 1, sizeof(requirement));
if (!con->materials) abort();
memcpy(con->materials, reqs, sizeof(requirement) * nreqs); memcpy(con->materials, reqs, sizeof(requirement) * nreqs);
nreqs = 0; nreqs = 0;
} }
@ -1440,15 +1446,17 @@ static void end_ships(parseinfo *pi, const XML_Char *el) {
assert(stype->construction); assert(stype->construction);
if (nreqs > 0) { if (nreqs > 0) {
construction *con = stype->construction; construction *con = stype->construction;
con->materials = calloc(sizeof(requirement), nreqs + 1); con->materials = (requirement *) calloc(nreqs + 1, sizeof(requirement));
if (!con->materials) abort();
memcpy(con->materials, reqs, sizeof(requirement) * nreqs); memcpy(con->materials, reqs, sizeof(requirement) * nreqs);
nreqs = 0; nreqs = 0;
} }
} }
else if (xml_strequal(el, "ship")) { else if (xml_strequal(el, "ship")) {
if (ncoasts > 0) { if (ncoasts > 0) {
stype->coasts = calloc(sizeof(const terrain_type *), ncoasts + 1); stype->coasts = (terrain_type **) calloc(ncoasts + 1, sizeof(terrain_type *));
memcpy(stype->coasts, coasts, sizeof(const terrain_type *) * ncoasts); if (!stype->coasts) abort();
memcpy(stype->coasts, coasts, sizeof(terrain_type *) * ncoasts);
ncoasts = 0; ncoasts = 0;
} }
pi->object = NULL; pi->object = NULL;
@ -1468,7 +1476,8 @@ static void end_buildings(parseinfo *pi, const XML_Char *el) {
if (stage) { if (stage) {
if (nreqs > 0) { if (nreqs > 0) {
construction *con = stage->construction; construction *con = stage->construction;
con->materials = calloc(sizeof(requirement), nreqs + 1); con->materials = (requirement *)calloc(nreqs + 1, sizeof(requirement));
if (!con->materials) abort();
memcpy(con->materials, reqs, sizeof(requirement) * nreqs); memcpy(con->materials, reqs, sizeof(requirement) * nreqs);
nreqs = 0; nreqs = 0;
} }
@ -1485,12 +1494,14 @@ static void end_buildings(parseinfo *pi, const XML_Char *el) {
else if (xml_strequal(el, "building")) { else if (xml_strequal(el, "building")) {
stage_ptr = NULL; stage_ptr = NULL;
if (nupkeep > 0) { if (nupkeep > 0) {
btype->maintenance = calloc(sizeof(maintenance), nupkeep + 1); btype->maintenance = (maintenance *)calloc(nupkeep + 1, sizeof(maintenance));
if (!btype->maintenance) abort();
memcpy(btype->maintenance, upkeep, sizeof(maintenance) * nupkeep); memcpy(btype->maintenance, upkeep, sizeof(maintenance) * nupkeep);
nupkeep = 0; nupkeep = 0;
} }
if (nrmods > 0) { if (nrmods > 0) {
btype->modifiers = calloc(sizeof(resource_mod), nrmods + 1); btype->modifiers = calloc(nrmods + 1, sizeof(resource_mod));
if (!btype->modifiers) abort();
memcpy(btype->modifiers, rmods, sizeof(resource_mod) * nrmods); memcpy(btype->modifiers, rmods, sizeof(resource_mod) * nrmods);
nrmods = 0; nrmods = 0;
} }

View File

@ -142,7 +142,7 @@ struct order *ord)
/* H<>lt Spr<70>che bis zu einem summierten Gesamtlevel von power aus. /* H<>lt Spr<70>che bis zu einem summierten Gesamtlevel von power aus.
* Jeder Zauber reduziert die 'Lebenskraft' (vigour) der Antimagiezone * Jeder Zauber reduziert die 'Lebenskraft' (vigour) der Antimagiezone
* um seine Stufe */ * um seine Stufe */
force = effect * 20; /* Stufe 5 =~ 100 */ force = effect * 20.0; /* Stufe 5 =~ 100 */
/* Regionszauber aufl<66>sen */ /* Regionszauber aufl<66>sen */
while (*ap && force > 0) { while (*ap && force > 0) {

View File

@ -79,7 +79,7 @@ static int json_flags(cJSON *json, const char *flags[]) {
static void json_requirements(cJSON *json, requirement **matp) { static void json_requirements(cJSON *json, requirement **matp) {
cJSON *child; cJSON *child;
int i; int i;
requirement *mat = calloc(sizeof(requirement), 1 + cJSON_GetArraySize(json)); requirement *mat = calloc(1 + cJSON_GetArraySize(json), sizeof(requirement));
for (i = 0, child = json->child; child; child = child->next, ++i) { for (i = 0, child = json->child; child; child = child->next, ++i) {
mat[i].number = child->valueint; mat[i].number = child->valueint;
mat[i].rtype = rt_get_or_create(child->string); mat[i].rtype = rt_get_or_create(child->string);
@ -134,7 +134,7 @@ static void json_maintenance(cJSON *json, maintenance **mtp) {
log_error("maintenance is not a json object or array (%d)", json->type); log_error("maintenance is not a json object or array (%d)", json->type);
return; return;
} }
*mtp = mt = (struct maintenance *) calloc(sizeof(struct maintenance), size + 1); *mtp = mt = (struct maintenance *) calloc(size + 1, sizeof(struct maintenance));
if (json->type == cJSON_Array) { if (json->type == cJSON_Array) {
int i; int i;
for (i = 0, child = json->child; child; child = child->next, ++i) { for (i = 0, child = json->child; child; child = child->next, ++i) {
@ -156,7 +156,7 @@ static void json_construction(cJSON *json, construction **consp) {
log_error("construction %s is not a json object: %d", json->string, json->type); log_error("construction %s is not a json object: %d", json->string, json->type);
return; return;
} }
cons = (construction *)calloc(sizeof(construction), 1); cons = (construction *)calloc(1, sizeof(construction));
for (child = json->child; child; child = child->next) { for (child = json->child; child; child = child->next) {
switch (child->type) { switch (child->type) {
case cJSON_Object: case cJSON_Object:
@ -332,7 +332,7 @@ static void json_stages(cJSON *json, building_type *bt) {
for (child = json->child; child; child = child->next) { for (child = json->child; child; child = child->next) {
switch (child->type) { switch (child->type) {
case cJSON_Object: case cJSON_Object:
stage = calloc(sizeof(building_stage), 1); stage = calloc(1, sizeof(building_stage));
json_stage(child, stage); json_stage(child, stage);
if (stage->construction->maxsize > 0) { if (stage->construction->maxsize > 0) {
stage->construction->maxsize -= size; stage->construction->maxsize -= size;
@ -375,7 +375,7 @@ static void json_building(cJSON *json, building_type *bt) {
if (strcmp(child->string, "construction") == 0) { if (strcmp(child->string, "construction") == 0) {
/* simple, single-stage building */ /* simple, single-stage building */
if (!bt->stages) { if (!bt->stages) {
building_stage *stage = calloc(sizeof(building_stage), 1); building_stage *stage = calloc(1, sizeof(building_stage));
json_construction(child, &stage->construction); json_construction(child, &stage->construction);
bt->stages = stage; bt->stages = stage;
} }

View File

@ -285,7 +285,7 @@ static local_names *get_bnames(const struct locale *lang)
selist *ql = buildingtypes; selist *ql = buildingtypes;
int qi; int qi;
bn = (local_names *)calloc(sizeof(local_names), 1); bn = (local_names *)calloc(1, sizeof(local_names));
bn->next = bnames; bn->next = bnames;
bn->lang = lang; bn->lang = lang;

View File

@ -79,7 +79,8 @@ int read_triggers(struct gamedata *data, trigger ** tp)
trigger *t_new(trigger_type * ttype) trigger *t_new(trigger_type * ttype)
{ {
trigger *t = calloc(sizeof(trigger), 1); trigger *t = calloc(1, sizeof(trigger));
if (!t) abort();
t->type = ttype; t->type = ttype;
if (ttype->initialize) if (ttype->initialize)
ttype->initialize(t); ttype->initialize(t);
@ -129,7 +130,7 @@ typedef struct handler_info {
static void init_handler(variant *var) static void init_handler(variant *var)
{ {
var->v = calloc(sizeof(handler_info), 1); var->v = calloc(1, sizeof(handler_info));
} }
static void free_handler(variant *var) static void free_handler(variant *var)
@ -204,6 +205,7 @@ void add_trigger(struct attrib **ap, const char *eventname, struct trigger *t)
td = (handler_info *)a->data.v; td = (handler_info *)a->data.v;
td->event = str_strdup(eventname); td->event = str_strdup(eventname);
} }
assert(td);
tp = &td->triggers; tp = &td->triggers;
while (*tp) while (*tp)
tp = &(*tp)->next; tp = &(*tp)->next;

View File

@ -214,9 +214,10 @@ void faction_genpassword(faction *f) {
faction *addfaction(const char *email, const char *password, faction *addfaction(const char *email, const char *password,
const struct race * frace, const struct locale * loc) const struct race * frace, const struct locale * loc)
{ {
faction *f = calloc(sizeof(faction), 1); faction *f = calloc(1, sizeof(faction));
char buf[128]; char buf[128];
if (!f) abort();
if (check_email(email) == 0) { if (check_email(email) == 0) {
faction_setemail(f, email); faction_setemail(f, email);
} else { } else {
@ -697,6 +698,7 @@ void faction_getorigin(const faction * f, int id, int *x, int *y)
static origin *new_origin(int id, int x, int y) { static origin *new_origin(int id, int x, int y) {
origin *ur = (origin *)calloc(1, sizeof(origin)); origin *ur = (origin *)calloc(1, sizeof(origin));
if (!ur) abort();
ur->id = id; ur->id = id;
ur->x = x; ur->x = x;
ur->y = y; ur->y = y;
@ -838,6 +840,7 @@ void free_factions(void) {
faction *faction_create(int no) faction *faction_create(int no)
{ {
faction *f = (faction *)calloc(1, sizeof(faction)); faction *f = (faction *)calloc(1, sizeof(faction));
if (!f) abort();
f->no = no; f->no = no;
fhash(f); fhash(f);
return f; return f;

View File

@ -55,6 +55,7 @@ group *new_group(faction * f, const char *name, int gid)
int index = gid % GMAXHASH; int index = gid % GMAXHASH;
group *g = calloc(1, sizeof(group)); group *g = calloc(1, sizeof(group));
if (!g) abort();
while (*gp) while (*gp)
gp = &(*gp)->next; gp = &(*gp)->next;
*gp = g; *gp = g;

View File

@ -244,7 +244,7 @@ item_type *it_get_or_create(resource_type *rtype) {
assert(rtype); assert(rtype);
if (!rtype->itype) { if (!rtype->itype) {
item_type * itype; item_type * itype;
itype = (item_type *)calloc(sizeof(item_type), 1); itype = (item_type *)calloc(1, sizeof(item_type));
if (!itype) abort(); if (!itype) abort();
itype->rtype = rtype; itype->rtype = rtype;
rtype->uchange = res_changeitem; rtype->uchange = res_changeitem;
@ -267,7 +267,7 @@ luxury_type *new_luxurytype(item_type * itype, int price)
assert(resource2luxury(itype->rtype) == NULL); assert(resource2luxury(itype->rtype) == NULL);
ltype = calloc(sizeof(luxury_type), 1); ltype = calloc(1, sizeof(luxury_type));
if (!ltype) abort(); if (!ltype) abort();
ltype->itype = itype; ltype->itype = itype;
ltype->price = price; ltype->price = price;
@ -284,7 +284,7 @@ weapon_type *new_weapontype(item_type * itype,
assert(itype && (!itype->rtype || !resource2weapon(itype->rtype))); assert(itype && (!itype->rtype || !resource2weapon(itype->rtype)));
wtype = calloc(sizeof(weapon_type), 1); wtype = calloc(1, sizeof(weapon_type));
if (!wtype) abort(); if (!wtype) abort();
if (damage) { if (damage) {
wtype->damage[0] = str_strdup(damage[0]); wtype->damage[0] = str_strdup(damage[0]);
@ -297,6 +297,7 @@ weapon_type *new_weapontype(item_type * itype,
wtype->offmod = offmod; wtype->offmod = offmod;
wtype->reload = reload; wtype->reload = reload;
wtype->skill = sk; wtype->skill = sk;
assert(itype->rtype);
itype->rtype->wtype = wtype; itype->rtype->wtype = wtype;
return wtype; return wtype;
@ -309,7 +310,7 @@ armor_type *new_armortype(item_type * itype, double penalty, variant magres,
assert(itype->rtype->atype == NULL); assert(itype->rtype->atype == NULL);
atype = calloc(sizeof(armor_type), 1); atype = calloc(1, sizeof(armor_type));
if (!atype) abort(); if (!atype) abort();
atype->itype = itype; atype->itype = itype;

View File

@ -312,8 +312,10 @@ message *add_message(message_list ** pm, message * m)
assert(m && m->type); assert(m && m->type);
if (m != NULL) { if (m != NULL) {
struct mlist *mnew = malloc(sizeof(struct mlist)); struct mlist *mnew = malloc(sizeof(struct mlist));
if (!mnew) abort();
if (*pm == NULL) { if (*pm == NULL) {
*pm = malloc(sizeof(message_list)); *pm = malloc(sizeof(message_list));
if (*pm == NULL) abort();
(*pm)->end = &(*pm)->begin; (*pm)->end = &(*pm)->begin;
} }
mnew->msg = msg_addref(m); mnew->msg = msg_addref(m);

View File

@ -61,6 +61,7 @@ void odata_create(order_data **pdata, size_t len, const char *str)
assert(pdata); assert(pdata);
data = malloc(sizeof(order_data) + len + 1); data = malloc(sizeof(order_data) + len + 1);
if (!data) abort();
data->_refcount = 1; data->_refcount = 1;
result = (char *)(data + 1); result = (char *)(data + 1);
data->_str = (len > 0) ? result : NULL; data->_str = (len > 0) ? result : NULL;
@ -230,6 +231,7 @@ order *copy_order(const order * src)
{ {
if (src != NULL) { if (src != NULL) {
order *ord = (order *)malloc(sizeof(order)); order *ord = (order *)malloc(sizeof(order));
if (!ord) abort();
ord->next = NULL; ord->next = NULL;
ord->command = src->command; ord->command = src->command;
ord->id = src->id; ord->id = src->id;

View File

@ -69,8 +69,10 @@ static node *new_node(region * r, int distance, node * prev)
n = node_garbage; n = node_garbage;
node_garbage = n->next; node_garbage = n->next;
} }
else else {
n = malloc(sizeof(node)); n = malloc(sizeof(node));
if (!n) abort();
}
n->next = NULL; n->next = NULL;
n->prev = prev; n->prev = prev;
n->r = r; n->r = r;

View File

@ -231,7 +231,7 @@ plane *create_new_plane(int id, const char *name, int minx, int maxx, int miny,
if (pl) if (pl)
return pl; return pl;
pl = calloc(1, sizeof(plane)); pl = calloc(1, sizeof(plane));
if (!pl) abort();
pl->next = NULL; pl->next = NULL;
pl->id = id; pl->id = id;
if (name) if (name)

View File

@ -113,7 +113,8 @@ int change_reservation(unit * u, const item_type * itype, int value)
rp = &(*rp)->next; rp = &(*rp)->next;
res = *rp; res = *rp;
if (!res) { if (!res) {
*rp = res = calloc(sizeof(reservation), 1); *rp = res = calloc(1, sizeof(reservation));
if (!res) abort();
res->type = itype; res->type = itype;
res->value = value; res->value = value;
} }
@ -138,7 +139,8 @@ int set_resvalue(unit * u, const item_type * itype, int value)
if (!res) { if (!res) {
if (!value) if (!value)
return 0; return 0;
*rp = res = calloc(sizeof(reservation), 1); *rp = res = calloc(1, sizeof(reservation));
if (!res) abort();
res->type = itype; res->type = itype;
res->value = value; res->value = value;
} }

View File

@ -101,6 +101,7 @@ static void rc_setoption(race *rc, int k, const char *value) {
variant *v = NULL; variant *v = NULL;
if (!rc->options) { if (!rc->options) {
rc->options = malloc(sizeof(rcoption)); rc->options = malloc(sizeof(rcoption));
if (!rc->options) abort();
rc->options->key[0] = key; rc->options->key[0] = key;
rc->options->key[1] = RCO_NONE; rc->options->key[1] = RCO_NONE;
v = rc->options->value; v = rc->options->value;
@ -202,6 +203,7 @@ race_t old_race(const struct race * rc)
int i; int i;
if (!xrefs) { if (!xrefs) {
xrefs = malloc(sizeof(rc_xref) * MAXRACES); xrefs = malloc(sizeof(rc_xref) * MAXRACES);
if (!xrefs) abort();
} }
for (i = 0; i != MAXRACES; ++i) { for (i = 0; i != MAXRACES; ++i) {
xrefs[i].rc = get_race(i); xrefs[i].rc = get_race(i);
@ -244,6 +246,7 @@ void racelist_insert(struct race_list **rl, const struct race *r)
{ {
race_list *rl2 = (race_list *)malloc(sizeof(race_list)); race_list *rl2 = (race_list *)malloc(sizeof(race_list));
if (!rl2) abort();
rl2->data = r; rl2->data = r;
rl2->next = *rl; rl2->next = *rl;
@ -340,7 +343,8 @@ race *rc_create(const char *zName)
char zText[64]; char zText[64];
assert(zName); assert(zName);
rc = (race *)calloc(sizeof(race), 1); rc = (race *)calloc(1, sizeof(race));
if (!rc) abort();
rc->mask_item = 1 << race_mask; rc->mask_item = 1 << race_mask;
++race_mask; ++race_mask;
@ -446,8 +450,10 @@ int rc_herb_trade(const struct race *rc)
} }
void set_study_speed(race *rc, skill_t sk, int modifier) { void set_study_speed(race *rc, skill_t sk, int modifier) {
if (!rc->study_speed) if (!rc->study_speed) {
rc->study_speed = calloc(1, MAXSKILLS); rc->study_speed = calloc(1, MAXSKILLS);
if (!rc->study_speed) abort();
}
rc->study_speed[sk] = (char)modifier; rc->study_speed[sk] = (char)modifier;
} }

View File

@ -471,6 +471,7 @@ void add_regionlist(region_list ** rl, region * r)
{ {
region_list *rl2 = (region_list *)malloc(sizeof(region_list)); region_list *rl2 = (region_list *)malloc(sizeof(region_list));
if (!rl2) abort();
rl2->data = r; rl2->data = r;
rl2->next = *rl; rl2->next = *rl;
@ -799,7 +800,7 @@ static region *deleted_regions;
void remove_region(region ** rlist, region * r) void remove_region(region ** rlist, region * r)
{ {
assert(r);
while (r->units) { while (r->units) {
unit *u = r->units; unit *u = r->units;
i_freeall(&u->items); i_freeall(&u->items);
@ -1040,6 +1041,7 @@ void setluxuries(region * r, const luxury_type * sale)
for (ltype = luxurytypes; ltype; ltype = ltype->next) { for (ltype = luxurytypes; ltype; ltype = ltype->next) {
struct demand *dmd = malloc(sizeof(struct demand)); struct demand *dmd = malloc(sizeof(struct demand));
if (!dmd) abort();
dmd->type = ltype; dmd->type = ltype;
if (ltype != sale) if (ltype != sale)
dmd->value = 1 + rng_int() % 5; dmd->value = 1 + rng_int() % 5;
@ -1165,6 +1167,7 @@ void terraform_region(region * r, const terrain_type * terrain)
int mnr = 0; int mnr = 0;
r->land = calloc(1, sizeof(land_region)); r->land = calloc(1, sizeof(land_region));
if (!r->land) abort();
r->land->ownership = NULL; r->land->ownership = NULL;
region_set_morale(r, MORALE_DEFAULT, -1); region_set_morale(r, MORALE_DEFAULT, -1);
region_setname(r, makename()); region_setname(r, makename());
@ -1186,6 +1189,7 @@ void terraform_region(region * r, const terrain_type * terrain)
} }
else { else {
sr = calloc(1, sizeof(struct surround)); sr = calloc(1, sizeof(struct surround));
if (!sr) abort();
} }
sr->next = nb; sr->next = nb;
sr->type = sale->type; sr->type = sale->type;
@ -1321,6 +1325,7 @@ struct message *msg)
imsg = imsg->next; imsg = imsg->next;
if (imsg == NULL) { if (imsg == NULL) {
imsg = malloc(sizeof(struct individual_message)); imsg = malloc(sizeof(struct individual_message));
if (!imsg) abort();
imsg->next = r->individual_messages; imsg->next = r->individual_messages;
imsg->msgs = NULL; imsg->msgs = NULL;
r->individual_messages = imsg; r->individual_messages = imsg;
@ -1372,11 +1377,13 @@ void region_set_owner(struct region *r, struct faction *owner, int turn)
assert(rule_region_owners()); assert(rule_region_owners());
if (r->land) { if (r->land) {
if (!r->land->ownership) { if (!r->land->ownership) {
r->land->ownership = malloc(sizeof(region_owner)); region_owner *ro = malloc(sizeof(region_owner));
if (!ro) abort();
assert(region_get_morale(r) == MORALE_DEFAULT); assert(region_get_morale(r) == MORALE_DEFAULT);
r->land->ownership->owner = NULL; ro->owner = NULL;
r->land->ownership->last_owner = NULL; ro->last_owner = NULL;
r->land->ownership->flags = 0; ro->flags = 0;
r->land->ownership = ro;
} }
r->land->ownership->since_turn = turn; r->land->ownership->since_turn = turn;
r->land->ownership->morale_turn = turn; r->land->ownership->morale_turn = turn;

View File

@ -70,8 +70,9 @@ struct rawmaterial *
add_resource(region * r, int level, int base, int divisor, add_resource(region * r, int level, int base, int divisor,
const resource_type * rtype) const resource_type * rtype)
{ {
struct rawmaterial *rm = calloc(sizeof(struct rawmaterial), 1); struct rawmaterial *rm = calloc(1, sizeof(struct rawmaterial));
if (!rm) abort();
rm->next = r->resources; rm->next = r->resources;
r->resources = rm; r->resources = rm;
rm->flags = 0; rm->flags = 0;
@ -183,6 +184,7 @@ struct rawmaterial_type *rmt_create(struct resource_type *rtype)
{ {
if (!rtype->raw) { if (!rtype->raw) {
rawmaterial_type *rmtype = rtype->raw = malloc(sizeof(rawmaterial_type)); rawmaterial_type *rmtype = rtype->raw = malloc(sizeof(rawmaterial_type));
if (!rmtype) abort();
rmtype->rtype = rtype; rmtype->rtype = rtype;
rmtype->terraform = terraform_default; rmtype->terraform = terraform_default;
rmtype->update = NULL; rmtype->update = NULL;

View File

@ -150,6 +150,7 @@ void read_planes(gamedata *data) {
if (pl == NULL) { if (pl == NULL) {
pl = calloc(1, sizeof(plane)); pl = calloc(1, sizeof(plane));
if (!pl) abort();
} }
else { else {
log_warning("the plane with id=%d already exists.", id); log_warning("the plane with id=%d already exists.", id);
@ -239,6 +240,7 @@ static void read_owner(gamedata *data, region_owner ** powner)
READ_INT(data->store, &since_turn); READ_INT(data->store, &since_turn);
if (since_turn >= 0) { if (since_turn >= 0) {
region_owner *owner = malloc(sizeof(region_owner)); region_owner *owner = malloc(sizeof(region_owner));
if (!owner) abort();
owner->since_turn = since_turn; owner->since_turn = since_turn;
READ_INT(data->store, &owner->morale_turn); READ_INT(data->store, &owner->morale_turn);
if (data->version >= MOURNING_VERSION) { if (data->version >= MOURNING_VERSION) {
@ -696,6 +698,7 @@ static region *readregion(gamedata *data, int x, int y)
if (strcmp(name, "end") == 0) if (strcmp(name, "end") == 0)
break; break;
res = malloc(sizeof(rawmaterial)); res = malloc(sizeof(rawmaterial));
if (!res) abort();
res->rtype = rt_find(name); res->rtype = rt_find(name);
if (!res->rtype && strncmp("rm_", name, 3) == 0) { if (!res->rtype && strncmp("rm_", name, 3) == 0) {
res->rtype = rt_find(name + 3); res->rtype = rt_find(name + 3);
@ -1203,6 +1206,7 @@ struct building *read_building(gamedata *data) {
storage * store = data->store; storage * store = data->store;
b = (building *)calloc(1, sizeof(building)); b = (building *)calloc(1, sizeof(building));
if (!b) abort();
READ_INT(store, &b->no); READ_INT(store, &b->no);
bhash(b); bhash(b);
READ_STR(store, name, sizeof(name)); READ_STR(store, name, sizeof(name));
@ -1257,6 +1261,7 @@ ship *read_ship(gamedata *data)
storage *store = data->store; storage *store = data->store;
sh = (ship *)calloc(1, sizeof(ship)); sh = (ship *)calloc(1, sizeof(ship));
if (!sh) abort();
READ_INT(store, &sh->no); READ_INT(store, &sh->no);
shash(sh); shash(sh);
READ_STR(store, name, sizeof(name)); READ_STR(store, name, sizeof(name));

View File

@ -71,7 +71,8 @@ const ship_type *findshiptype(const char *name, const struct locale *lang)
selist *ql; selist *ql;
int qi; int qi;
sn = (local_names *)calloc(sizeof(local_names), 1); sn = (local_names *)calloc(1, sizeof(local_names));
if (!sn) abort();
sn->next = snames; sn->next = snames;
sn->lang = lang; sn->lang = lang;
@ -124,7 +125,8 @@ ship_type *st_get_or_create(const char * name) {
ship_type * st = st_find_i(name); ship_type * st = st_find_i(name);
assert(!snames); assert(!snames);
if (!st) { if (!st) {
st = (ship_type *)calloc(sizeof(ship_type), 1); st = (ship_type *)calloc(1, sizeof(ship_type));
if (!st) abort();
st->_name = str_strdup(name); st->_name = str_strdup(name);
st->storm = 1.0; st->storm = 1.0;
st->tac_bonus = 1.0; st->tac_bonus = 1.0;
@ -189,6 +191,7 @@ ship *new_ship(const ship_type * stype, region * r, const struct locale *lang)
ship *sh = (ship *)calloc(1, sizeof(ship)); ship *sh = (ship *)calloc(1, sizeof(ship));
const char *sname = 0; const char *sname = 0;
if (!sh) abort();
assert(stype); assert(stype);
sh->no = newcontainerid(); sh->no = newcontainerid();
sh->coast = NODIRECTION; sh->coast = NODIRECTION;

View File

@ -39,7 +39,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/** skillmod attribut **/ /** skillmod attribut **/
static void init_skillmod(variant *var) static void init_skillmod(variant *var)
{ {
var->v = calloc(sizeof(skillmod_data), 1); var->v = calloc(1, sizeof(skillmod_data));
} }
/** temporary skill modification (NOT SAVED!). */ /** temporary skill modification (NOT SAVED!). */

View File

@ -19,6 +19,7 @@
spellbook * create_spellbook(const char * name) spellbook * create_spellbook(const char * name)
{ {
spellbook *result = (spellbook *)malloc(sizeof(spellbook)); spellbook *result = (spellbook *)malloc(sizeof(spellbook));
if (!result) abort();
result->name = name ? str_strdup(name) : 0; result->name = name ? str_strdup(name) : 0;
result->spells = 0; result->spells = 0;
return result; return result;
@ -79,6 +80,7 @@ void spellbook_addref(spellbook *sb, const char *name, int level) {
assert(sb && name && level > 0); assert(sb && name && level > 0);
sbe = (spellbook_entry *)malloc(sizeof(spellbook_entry)); sbe = (spellbook_entry *)malloc(sizeof(spellbook_entry));
if (!sbe) abort();
spellref_init(&sbe->spref, NULL, name); spellref_init(&sbe->spref, NULL, name);
sbe->level = level; sbe->level = level;
selist_push(&sb->spells, sbe); selist_push(&sb->spells, sbe);
@ -95,6 +97,7 @@ void spellbook_add(spellbook *sb, spell *sp, int level)
} }
#endif #endif
sbe = (spellbook_entry *)malloc(sizeof(spellbook_entry)); sbe = (spellbook_entry *)malloc(sizeof(spellbook_entry));
if (!sbe) abort();
spellref_init(&sbe->spref, sp, NULL); spellref_init(&sbe->spref, sp, NULL);
sbe->level = level; sbe->level = level;
selist_push(&sb->spells, sbe); selist_push(&sb->spells, sbe);

View File

@ -125,7 +125,7 @@ terrain_type * get_or_create_terrain(const char *name) {
terrain_type *terrain = terrain_find_i(name); terrain_type *terrain = terrain_find_i(name);
if (!terrain) { if (!terrain) {
++terrain_changes; ++terrain_changes;
terrain = (terrain_type *)calloc(sizeof(terrain_type), 1); terrain = (terrain_type *)calloc(1, sizeof(terrain_type));
if (terrain) { if (terrain) {
terrain->_name = str_strdup(name); terrain->_name = str_strdup(name);
terrain->next = registered_terrains; terrain->next = registered_terrains;

View File

@ -1408,7 +1408,7 @@ static void init_prefixnames(void)
in = in->next; in = in->next;
} }
if (in == NULL) { if (in == NULL) {
in = calloc(sizeof(local_names), 1); in = calloc(1, sizeof(local_names));
if (!in) abort(); if (!in) abort();
} }
in->next = pnames; in->next = pnames;

View File

@ -244,7 +244,7 @@ static int a_ageicastle(struct attrib *a, void *owner)
static void a_initicastle(variant *var) static void a_initicastle(variant *var)
{ {
var->v = calloc(sizeof(icastle_data), 1); var->v = calloc(1, sizeof(icastle_data));
} }
attrib_type at_icastle = { attrib_type at_icastle = {
@ -295,7 +295,7 @@ int get_spell_level_mage(const spell * sp, void * cbdata)
static void init_mage(variant *var) static void init_mage(variant *var)
{ {
var->v = calloc(sizeof(sc_mage), 1); var->v = calloc(1, sizeof(sc_mage));
} }
static void free_mage(variant *var) static void free_mage(variant *var)

View File

@ -56,7 +56,7 @@ void renumber_factions(void)
ADDMSG(&f->msgs, msg_message("renumber_inuse", "id", want)); ADDMSG(&f->msgs, msg_message("renumber_inuse", "id", want));
} }
else { else {
struct renum *r = calloc(sizeof(struct renum), 1); struct renum *r = calloc(1, sizeof(struct renum));
r->next = *rn; r->next = *rn;
r->attrib = a; r->attrib = a;
r->faction = f; r->faction = f;

View File

@ -154,7 +154,7 @@ int study_cost(struct unit *u, skill_t sk)
static void init_learning(variant *var) static void init_learning(variant *var)
{ {
var->v = calloc(sizeof(teaching_info), 1); var->v = calloc(1, sizeof(teaching_info));
} }
static void done_learning(variant *var) static void done_learning(variant *var)

View File

@ -404,7 +404,7 @@ summary *make_summary(void)
while (plang && plang->locale != lang) while (plang && plang->locale != lang)
plang = plang->next; plang = plang->next;
if (!plang) { if (!plang) {
plang = calloc(sizeof(struct language), 1); plang = calloc(1, sizeof(struct language));
plang->next = s->languages; plang->next = s->languages;
s->languages = plang; s->languages = plang;
plang->locale = lang; plang->locale = lang;

View File

@ -51,7 +51,7 @@ typedef struct changefaction_data {
static void changefaction_init(trigger * t) static void changefaction_init(trigger * t)
{ {
t->data.v = calloc(sizeof(changefaction_data), 1); t->data.v = calloc(1, sizeof(changefaction_data));
} }
static void changefaction_free(trigger * t) static void changefaction_free(trigger * t)

View File

@ -52,7 +52,7 @@ typedef struct changerace_data {
static void changerace_init(trigger * t) static void changerace_init(trigger * t)
{ {
t->data.v = calloc(sizeof(changerace_data), 1); t->data.v = calloc(1, sizeof(changerace_data));
} }
static void changerace_free(trigger * t) static void changerace_free(trigger * t)

View File

@ -56,7 +56,7 @@ typedef struct createcurse_data {
static void createcurse_init(trigger * t) static void createcurse_init(trigger * t)
{ {
t->data.v = calloc(sizeof(createcurse_data), 1); t->data.v = calloc(1, sizeof(createcurse_data));
} }
static void createcurse_free(trigger * t) static void createcurse_free(trigger * t)

View File

@ -55,7 +55,7 @@ typedef struct createunit_data {
static void createunit_init(trigger * t) static void createunit_init(trigger * t)
{ {
t->data.v = calloc(sizeof(createunit_data), 1); t->data.v = calloc(1, sizeof(createunit_data));
} }
static void createunit_free(trigger * t) static void createunit_free(trigger * t)

View File

@ -86,7 +86,7 @@ static int gate_read(trigger * t, gamedata *data)
static void gate_init(trigger * t) static void gate_init(trigger * t)
{ {
t->data.v = calloc(sizeof(gate_data), 1); t->data.v = calloc(1, sizeof(gate_data));
} }
static void gate_done(trigger * t) static void gate_done(trigger * t)

View File

@ -51,7 +51,7 @@ typedef struct giveitem_data {
static void giveitem_init(trigger * t) static void giveitem_init(trigger * t)
{ {
t->data.v = calloc(sizeof(giveitem_data), 1); t->data.v = calloc(1, sizeof(giveitem_data));
} }
static void giveitem_free(trigger * t) static void giveitem_free(trigger * t)

View File

@ -42,7 +42,7 @@ typedef struct timeout_data {
static void timeout_init(trigger * t) static void timeout_init(trigger * t)
{ {
t->data.v = calloc(sizeof(timeout_data), 1); t->data.v = calloc(1, sizeof(timeout_data));
} }
static void timeout_free(trigger * t) static void timeout_free(trigger * t)