Index: fpdfsdk/javascript/JS_Object.cpp |
diff --git a/fpdfsdk/javascript/JS_Object.cpp b/fpdfsdk/javascript/JS_Object.cpp |
index b0a307beb11a368849c6fcdfeca548fc38ec9ea3..9ec316303dc3b4c0a2a8919ee92e04858365bad2 100644 |
--- a/fpdfsdk/javascript/JS_Object.cpp |
+++ b/fpdfsdk/javascript/JS_Object.cpp |
@@ -115,16 +115,25 @@ void CJS_Timer::KillJSTimer() { |
// static |
void CJS_Timer::TimerProc(int idEvent) { |
- const auto it = GetGlobalTimerMap()->find(idEvent); |
- if (it != GetGlobalTimerMap()->end()) { |
- CJS_Timer* pTimer = it->second; |
- if (!pTimer->m_bProcessing) { |
- CFX_AutoRestorer<bool> scoped_processing(&pTimer->m_bProcessing); |
- pTimer->m_bProcessing = true; |
- if (pTimer->m_pEmbedObj) |
- pTimer->m_pEmbedObj->TimerProc(pTimer); |
- } |
- } |
+ auto it = GetGlobalTimerMap()->find(idEvent); |
+ if (it == GetGlobalTimerMap()->end()) |
+ return; |
+ |
+ CJS_Timer* pTimer = it->second; |
+ if (pTimer->m_bProcessing) |
+ return; |
+ |
+ pTimer->m_bProcessing = true; |
+ if (pTimer->m_pEmbedObj) |
+ pTimer->m_pEmbedObj->TimerProc(pTimer); |
+ |
+ // Timer proc may have destroyed timer, find it again. |
+ it = GetGlobalTimerMap()->find(idEvent); |
+ if (it == GetGlobalTimerMap()->end()) |
+ return; |
+ |
+ pTimer = it->second; |
+ pTimer->m_bProcessing = false; |
} |
// static |