fix crash (null pointer in make_cmd)

This commit is contained in:
Enno Rehling 2014-11-16 12:46:55 +01:00
parent 1556c07787
commit 13b443ebb3
2 changed files with 23 additions and 20 deletions

View File

@ -1,3 +1,3 @@
#define VERSION_MAJOR 3
#define VERSION_MINOR 3
#define VERSION_BUILD 689
#define VERSION_BUILD 690

View File

@ -1788,11 +1788,11 @@ static void create_item(unit * u, const item_type * itype, int want)
int make_cmd(unit * u, struct order *ord)
{
region *r = u->region;
const building_type *btype;
const ship_type *stype;
param_t p;
int m;
const item_type *itype;
const building_type *btype = 0;
const ship_type *stype = 0;
const item_type *itype = 0;
param_t p = NOPARAM;
int m = INT_MAX;
const char *s;
const struct locale *lang = u->faction->locale;
char ibuf[16];
@ -1802,17 +1802,19 @@ int make_cmd(unit * u, struct order *ord)
assert(kwd == K_MAKE);
s = getstrtoken();
m = atoi((const char *)s);
sprintf(ibuf, "%d", m);
if (!strcmp(ibuf, (const char *)s)) {
/* first came a want-paramter */
s = getstrtoken();
if (s) {
m = atoi((const char *)s);
sprintf(ibuf, "%d", m);
if (!strcmp(ibuf, (const char *)s)) {
/* a quantity was given */
s = getstrtoken();
} else {
m = INT_MAX;
}
if (s) {
p = findparam(s, u->faction->locale);
}
}
else {
m = INT_MAX;
}
p = findparam(s, u->faction->locale);
if (p == P_ROAD) {
plane *pl = rplane(r);
@ -1851,10 +1853,11 @@ int make_cmd(unit * u, struct order *ord)
* 'academy of arts', we need to figure out what the player meant.
* This is not 100% safe.
*/
stype = findshiptype(s, lang);
btype = findbuildingtype(s, lang);
itype = finditemtype(s, lang);
if (s) {
stype = findshiptype(s, lang);
btype = findbuildingtype(s, lang);
itype = finditemtype(s, lang);
}
if (itype != NULL && (btype != NULL || stype != NULL)) {
if (itype->construction == NULL) {
/* if the item cannot be made, we probably didn't mean to make it */