Index: fpdfsdk/src/javascript/Document.cpp |
diff --git a/fpdfsdk/src/javascript/Document.cpp b/fpdfsdk/src/javascript/Document.cpp |
index be568e10cc8e207218a9c5bd24922bf3e45bd631..4090f99b48f0a30ca75345df971d94f80d851d23 100644 |
--- a/fpdfsdk/src/javascript/Document.cpp |
+++ b/fpdfsdk/src/javascript/Document.cpp |
@@ -988,15 +988,25 @@ FX_BOOL Document::delay(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sE |
} |
else |
{ |
- for (int i=0,sz=m_DelayData.GetSize(); i<sz; i++) |
+ CFX_ArrayTemplate<CJS_DelayData*> DelayDataToProcess; |
+ |
+ for (int i=0,sz=m_DelayData.GetSize(); i < sz; i++) |
{ |
if (CJS_DelayData* pData = m_DelayData.GetAt(i)) |
{ |
- Field::DoDelay(m_pDocument, pData); |
- delete m_DelayData.GetAt(i); |
+ DelayDataToProcess.Add(pData); |
+ m_DelayData.SetAt(i, NULL); |
} |
} |
m_DelayData.RemoveAll(); |
+ |
+ for (int i=0,sz=DelayDataToProcess.GetSize(); i < sz; i++) |
+ { |
+ CJS_DelayData* pData = DelayDataToProcess.GetAt(i); |
+ Field::DoDelay(m_pDocument, pData); |
+ DelayDataToProcess.SetAt(i,NULL); |
+ delete pData; |
+ } |
} |
return TRUE; |
@@ -1927,6 +1937,7 @@ void Document::AddDelayData(CJS_DelayData* pData) |
void Document::DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex) |
{ |
CFX_DWordArray DelArray; |
+ CFX_ArrayTemplate<CJS_DelayData*> DelayDataForFieldAndControlIndex; |
for (int i=0,sz=m_DelayData.GetSize(); i<sz; i++) |
{ |
@@ -1934,8 +1945,7 @@ void Document::DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex) |
{ |
if (pData->sFieldName == sFieldName && pData->nControlIndex == nControlIndex) |
{ |
- Field::DoDelay(m_pDocument, pData); |
- delete pData; |
+ DelayDataForFieldAndControlIndex.Add(pData); |
m_DelayData.SetAt(i, NULL); |
DelArray.Add(i); |
} |
@@ -1946,6 +1956,14 @@ void Document::DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex) |
{ |
m_DelayData.RemoveAt(DelArray[j]); |
} |
+ |
+ for (int i=0,sz=DelayDataForFieldAndControlIndex.GetSize(); i < sz; i++) |
+ { |
+ CJS_DelayData* pData = DelayDataForFieldAndControlIndex.GetAt(i); |
+ Field::DoDelay(m_pDocument, pData); |
+ DelayDataForFieldAndControlIndex.SetAt(i,NULL); |
+ delete pData; |
+ } |
} |
void Document::AddDelayAnnotData(CJS_AnnotObj *pData) |