Переглянути джерело

- Added a damage cap to CR_ACIDDEMONSTRATION of INT_MAX/2 to prevent overflows. It is not capped to INT_MAX because damage increasing skills would cause it to still over flow afterwards.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8107 54d463be-8e91-2dee-dedb-b68131a5f0ec
skotlex 19 роки тому
батько
коміт
1296ac9375
2 змінених файлів з 7 додано та 0 видалено
  1. 3 0
      Changelog-Trunk.txt
  2. 4 0
      src/map/battle.c

+ 3 - 0
Changelog-Trunk.txt

@@ -3,6 +3,9 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 2006/08/03
+	* Added a damage cap to CR_ACIDDEMONSTRATION of INT_MAX/2 to prevent
+	  overflows. It is not capped to INT_MAX because damage increasing skills
+	  would cause it to still overflow afterwards. [Skotlex]
 	* Fixed NPC_CRITICALSLASH not being considered as a Critical hit by the
 	  code. [Skotlex]
 	* Added RUDE_ATTACKED_COUNT so you can easily adjust how many rude-attacks

+ 4 - 0
src/map/battle.c

@@ -2620,6 +2620,10 @@ struct Damage  battle_calc_misc_attack(
 	case CR_ACIDDEMONSTRATION: // updated the formula based on a Japanese formula found to be exact [Reddozen]
 		md.damage = 7*tstatus->vit*sstatus->int_*sstatus->int_ / (10*(tstatus->vit+sstatus->int_));
 		if (tsd) md.damage>>=1;
+		if (md.damage < 0 || md.damage > INT_MAX>>1)
+	  	//Overflow prevention, will anyone whine if I cap it to a few billion?
+		//Not capped to INT_MAX to give some room for further damage increase.
+			md.damage = INT_MAX>>1;
 		break;
 	case NJ_ZENYNAGE:
 		md.damage = skill_get_zeny(skill_num ,skill_lv);