From fe841cd3c097a46aaa5e120a14e2d3c354f9860d Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 24 May 2008 17:38:38 +0000 Subject: [PATCH] fixing crashes from triggers --- src/common/triggers/clonedied.c | 2 +- src/common/triggers/createcurse.c | 24 ++++++++++++------------ src/common/triggers/gate.c | 2 +- src/common/triggers/giveitem.c | 18 +++++++++--------- src/common/triggers/removecurse.c | 28 +++++++++++++--------------- src/common/triggers/shock.c | 14 ++++++-------- src/common/triggers/unitmessage.c | 4 +--- 7 files changed, 43 insertions(+), 49 deletions(-) diff --git a/src/common/triggers/clonedied.c b/src/common/triggers/clonedied.c index 1f1563bd5..6ad77689b 100644 --- a/src/common/triggers/clonedied.c +++ b/src/common/triggers/clonedied.c @@ -46,7 +46,7 @@ clonedied_handle(trigger * t, void * data) { /* destroy the unit */ unit * u = (unit*)t->data.v; - if (u!=NULL) { + if (u) { attrib *a = a_find(u->attribs, &at_clone); if(a) a_remove(&u->attribs, a); } else diff --git a/src/common/triggers/createcurse.c b/src/common/triggers/createcurse.c index 14e40bfda..12958e871 100644 --- a/src/common/triggers/createcurse.c +++ b/src/common/triggers/createcurse.c @@ -65,20 +65,20 @@ createcurse_free(trigger * t) static int createcurse_handle(trigger * t, void * data) { - /* call an event handler on createcurse. - * data.v -> ( variant event, int timer ) - */ - createcurse_data * td = (createcurse_data*)t->data.v; - if (td->mage!=NULL && td->target!=NULL) { + /* call an event handler on createcurse. + * data.v -> ( variant event, int timer ) + */ + createcurse_data * td = (createcurse_data*)t->data.v; + if (td->mage && td->target && td->mage->number && td->target->number) { variant var; var.i = td->effect; - create_curse(td->mage, &td->target->attribs, - td->type, td->vigour, td->duration, var, td->men); - } else { - log_error(("could not perform createcurse::handle()\n")); - } - unused(data); - return 0; + create_curse(td->mage, &td->target->attribs, + td->type, td->vigour, td->duration, var, td->men); + } else { + log_error(("could not perform createcurse::handle()\n")); + } + unused(data); + return 0; } static void diff --git a/src/common/triggers/gate.c b/src/common/triggers/gate.c index 754a4c549..35c705511 100644 --- a/src/common/triggers/gate.c +++ b/src/common/triggers/gate.c @@ -44,7 +44,7 @@ gate_handle(trigger * t, void * data) struct building * b = gd->gate; struct region * r = gd->target; - if (b && r) { + if (b && b->region && r) { unit ** up = &b->region->units; while (*up) { unit * u = *up; diff --git a/src/common/triggers/giveitem.c b/src/common/triggers/giveitem.c index 4c542c66f..3a441b02f 100644 --- a/src/common/triggers/giveitem.c +++ b/src/common/triggers/giveitem.c @@ -58,17 +58,17 @@ giveitem_free(trigger * t) static int giveitem_handle(trigger * t, void * data) { - /* call an event handler on giveitem. - * data.v -> ( variant event, int timer ) - */ - giveitem_data * td = (giveitem_data*)t->data.v; - if (td->u!=NULL) { - i_change(&td->u->items, td->itype, td->number); + /* call an event handler on giveitem. + * data.v -> ( variant event, int timer ) + */ + giveitem_data * td = (giveitem_data*)t->data.v; + if (td->u && td->u->number) { + i_change(&td->u->items, td->itype, td->number); } else { - log_error(("could not perform giveitem::handle()\n")); + log_error(("could not perform giveitem::handle()\n")); } - unused(data); - return 0; + unused(data); + return 0; } static void diff --git a/src/common/triggers/removecurse.c b/src/common/triggers/removecurse.c index cce814aad..2be5986da 100644 --- a/src/common/triggers/removecurse.c +++ b/src/common/triggers/removecurse.c @@ -56,21 +56,19 @@ removecurse_free(trigger * t) static int removecurse_handle(trigger * t, void * data) { - /* call an event handler on removecurse. - * data.v -> ( variant event, int timer ) - */ - removecurse_data * td = (removecurse_data*)t->data.v; - if (td->curse!=NULL && td->target!=NULL) { - attrib * a = a_select(td->target->attribs, td->curse, cmp_curse); - if (a) { - a_remove(&td->target->attribs, a); - } - else log_error(("could not perform removecurse::handle()\n")); - } else { - log_error(("could not perform removecurse::handle()\n")); - } - unused(data); - return 0; + /* call an event handler on removecurse. + * data.v -> ( variant event, int timer ) + */ + removecurse_data * td = (removecurse_data*)t->data.v; + if (td->curse && td->target) { + attrib * a = a_select(td->target->attribs, td->curse, cmp_curse); + if (a) { + a_remove(&td->target->attribs, a); + } + else log_error(("could not perform removecurse::handle()\n")); + } + unused(data); + return 0; } static void diff --git a/src/common/triggers/shock.c b/src/common/triggers/shock.c index fced52de2..04fa2f420 100644 --- a/src/common/triggers/shock.c +++ b/src/common/triggers/shock.c @@ -88,15 +88,13 @@ do_shock(unit *u, const char *reason) static int shock_handle(trigger * t, void * data) { - /* destroy the unit */ - unit * u = (unit*)t->data.v; - if (u!=NULL) { - do_shock(u, "trigger"); - } else { - log_error(("could not perform shock::handle()\n")); + /* destroy the unit */ + unit * u = (unit*)t->data.v; + if (u && u->number) { + do_shock(u, "trigger"); } - unused(data); - return 0; + unused(data); + return 0; } static void diff --git a/src/common/triggers/unitmessage.c b/src/common/triggers/unitmessage.c index 800eeadee..9291203fb 100644 --- a/src/common/triggers/unitmessage.c +++ b/src/common/triggers/unitmessage.c @@ -63,11 +63,9 @@ unitmessage_handle(trigger * t, void * data) * data.v -> ( variant event, int timer ) */ unitmessage_data * td = (unitmessage_data*)t->data.v; - if (td->target!=NULL) { + if (td->target && td->target->no) { struct faction * f = td->target->faction; addmessage(td->target->region, f, LOC(f->locale, td->string), td->type, td->level); - } else { - log_error(("could not perform unitmessage::handle()\n")); } unused(data); return 0;