From f7f45451e5191148b7e28754d05b75b9f6322249 Mon Sep 17 00:00:00 2001 From: xantara Date: Wed, 1 Aug 2012 04:46:52 +0000 Subject: Added checks for when a homunculus class is invalid when passing through the hom_class2mapid function. Special thanks to Variant. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@16546 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/homunculus.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/map/homunculus.c') diff --git a/src/map/homunculus.c b/src/map/homunculus.c index aaf6dd410..56d87002d 100644 --- a/src/map/homunculus.c +++ b/src/map/homunculus.c @@ -242,10 +242,13 @@ int merc_hom_levelup(struct homun_data *hd) char output[256] ; int m_class; - m_class = hom_class2mapid(hd->homunculus.class_); + if((m_class = hom_class2mapid(hd->homunculus.class_)) == -1) { + ShowError("merc_hom_levelup: Invalid class %d. \n", hd->homunculus.class_); + return 0; + } if((m_class&HOM_REG) && (hd->homunculus.level >= battle_config.hom_max_level || ((m_class&HOM_S) && hd->homunculus.level >= battle_config.hom_S_max_level) || !hd->exp_next || hd->homunculus.exp < hd->exp_next)) - return 0 ; + return 0; hom = &hd->homunculus; hom->level++ ; @@ -371,7 +374,7 @@ int hom_mutate(struct homun_data *hd, int homun_id) m_class = hom_class2mapid(hd->homunculus.class_); m_id = hom_class2mapid(homun_id); - if( !(m_class&HOM_EVO) || !(m_id&HOM_S) ) { + if( m_class == -1 || m_id == -1 || !(m_class&HOM_EVO) || !(m_id&HOM_S) ) { clif_emotion(&hd->bl, E_SWT); return 0; } @@ -411,7 +414,10 @@ int merc_hom_gainexp(struct homun_data *hd,int exp) if(hd->homunculus.vaporize) return 1; - m_class = hom_class2mapid(hd->homunculus.class_); + if((m_class = hom_class2mapid(hd->homunculus.class_)) == -1) { + ShowError("merc_hom_gainexp: Invalid class %d. \n", hd->homunculus.class_); + return 0; + } if( hd->exp_next == 0 || ((m_class&HOM_REG) && hd->homunculus.level >= battle_config.hom_max_level) || -- cgit v1.2.3-70-g09d2