소스 검색

Addressing charge restart task null pointer vulnerability

Reported by: JMD
Zoey76 9 년 전
부모
커밋
89a493c564
1개의 변경된 파일8개의 추가작업 그리고 3개의 파일을 삭제
  1. 8 3
      L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

+ 8 - 3
L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -640,7 +640,7 @@ public final class L2PcInstance extends L2Playable
 	
 	// charges
 	private final AtomicInteger _charges = new AtomicInteger();
-	private ScheduledFuture<?> _chargeTask = null;
+	private volatile ScheduledFuture<?> _chargeTask = null;
 	
 	// Absorbed Souls
 	private int _souls = 0;
@@ -12839,8 +12839,13 @@ public final class L2PcInstance extends L2Playable
 	{
 		if (_chargeTask != null)
 		{
-			_chargeTask.cancel(false);
-			_chargeTask = null;
+			synchronized (this)
+			{
+				if (_chargeTask != null)
+				{
+					_chargeTask.cancel(false);
+				}
+			}
 		}
 		_chargeTask = ThreadPoolManager.getInstance().scheduleGeneral(new ResetChargesTask(this), 600000);
 	}