OSDN Git Service

#37358 (2.2.0.36) 極端に価値の高いアイテム時に発生するcalc_android_exp()内のオーバーフローを修正。 / Fix overflow...
authorDeskull <desull@users.sourceforge.jp>
Tue, 18 Jul 2017 14:40:51 +0000 (23:40 +0900)
committerDeskull <desull@users.sourceforge.jp>
Tue, 18 Jul 2017 14:40:51 +0000 (23:40 +0900)
src/defines.h
src/effects.c

index b04565e..24e322d 100644 (file)
@@ -53,7 +53,7 @@
 #define FAKE_VER_MAJOR 12 /*!< ゲームのバージョン番号定義(メジャー番号 + 10) */
 #define FAKE_VER_MINOR 2 /*!< ゲームのバージョン番号定義(マイナー番号) */
 #define FAKE_VER_PATCH 0 /*!< ゲームのバージョン番号定義(パッチ番号) */
-#define FAKE_VER_EXTRA 35 /*!< ゲームのバージョン番号定義(エクストラ番号) */
+#define FAKE_VER_EXTRA 36 /*!< ゲームのバージョン番号定義(エクストラ番号) */
 
 
  /*!
index f8ccca0..fd234d4 100644 (file)
@@ -4851,15 +4851,15 @@ void calc_android_exp(void)
                        if (level > 65) level = 35 + (level - 65) / 5;
                        else if (level > 35) level = 25 + (level - 35) / 3;
                        else if (level > 15) level = 15 + (level - 15) / 2;
-                       exp = MIN(100000L, value) * level * level / 2;
+                       exp = MIN(100000L, value) / 2 * level * level;
                        if (value > 100000L)
-                               exp += (value - 100000L) * level * level / 8;
+                               exp += (value - 100000L) / 8 * level * level;
                }
                else
                {
                        exp = MIN(100000L, value) * level;
                        if (value > 100000L)
-                               exp += (value - 100000L) * level / 4;
+                               exp += (value - 100000L) / 4  * level;
                }
                if ((((i == INVEN_RARM) || (i == INVEN_LARM)) && (buki_motteruka(i))) || (i == INVEN_BOW)) total_exp += exp / 48;
                else total_exp += exp / 16;