diff options
author | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2010-12-17 20:04:26 +0000 |
---|---|---|
committer | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2010-12-17 20:04:26 +0000 |
commit | 590cab6d67e00e0620cf31fc8fbe5ed5ec1b7abf (patch) | |
tree | e4b9a39a7278173f882bec766cef6eb368bc84a8 /src | |
parent | b11b98f7fc5794b4b16627e7c83a46d05fe55d07 (diff) | |
download | hercules-590cab6d67e00e0620cf31fc8fbe5ed5ec1b7abf.tar.gz hercules-590cab6d67e00e0620cf31fc8fbe5ed5ec1b7abf.tar.bz2 hercules-590cab6d67e00e0620cf31fc8fbe5ed5ec1b7abf.tar.xz hercules-590cab6d67e00e0620cf31fc8fbe5ed5ec1b7abf.zip |
* Added temporary check to skill_delunitgroup to prevent crashes when 'group' is NULL and added some debug messages to track down the source of the crash (bugreport:3504).
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14599 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r-- | src/map/skill.c | 8 | ||||
-rw-r--r-- | src/map/skill.h | 3 | ||||
-rw-r--r-- | src/map/status.c | 9 |
3 files changed, 17 insertions, 3 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index e77703e1f..3c4cbcd21 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10161,13 +10161,17 @@ struct skill_unit_group* skill_initunitgroup (struct block_list* src, int count, /*========================================== * *------------------------------------------*/ -int skill_delunitgroup (struct skill_unit_group *group) +int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int line, const char* func) { struct block_list* src; struct unit_data *ud; int i,j; - nullpo_ret(group); + if( group == NULL ) + { + ShowDebug("skill_delunitgroup: group is NULL (source=%s:%d, %s)! Please report this! (#3504)\n", file, line, func); + return 0; + } src=map_id2bl(group->src_id); ud = unit_bl2ud(src); diff --git a/src/map/skill.h b/src/map/skill.h index 04f2e8d28..fc7877be3 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -272,7 +272,8 @@ struct skill_unit_group *skill_unitsetting(struct block_list* src, short skillid struct skill_unit *skill_initunit (struct skill_unit_group *group, int idx, int x, int y, int val1, int val2); int skill_delunit(struct skill_unit *unit); struct skill_unit_group *skill_initunitgroup(struct block_list* src, int count, short skillid, short skilllv, int unit_id, int limit, int interval); -int skill_delunitgroup(struct skill_unit_group *group); +int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int line, const char* func); +#define skill_delunitgroup(group) skill_delunitgroup_(group,__FILE__,__LINE__,__func__) int skill_clear_unitgroup(struct block_list *src); int skill_clear_group(struct block_list *bl, int flag); diff --git a/src/map/status.c b/src/map/status.c index 6778bf5b1..449ea8f56 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -6605,6 +6605,15 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid) if(sce->val2) {// erase associated land skill group = skill_id2group(sce->val2); + + if( group == NULL ) + { + ShowDebug("status_change_end: SC_DANCING is missing skill unit group (val1=%d, val2=%d, val3=%d, val4=%d, timer=%d, tid=%d, char_id=%d, map=%s, x=%d, y=%d). Please report this! (#3504)\n", + sce->val1, sce->val2, sce->val3, sce->val4, sce->timer, tid, + sd ? sd->status.char_id : 0, + mapindex_id2name(map_id2index(bl->m)), bl->x, bl->y); + } + sce->val2 = 0; skill_delunitgroup(group); } |