From 09d33bcd82a82cb55039d41651df13e17d6c3e59 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 19 Aug 2015 09:49:24 -0700 Subject: Merge to XFA: CFX_MapByteStringToPtr considered harmful (combo patch). New manual edits: two unused members deleted, one adapted. fde_csscache.cpp fde_csscache.h fpdfxfa_doc.h fx_ge_fontmap.cpp (cherry picked from commit 1d9dbd53b205b2b4d9e75a7eeb95e80837917ea3) (cherry picked from commit cb4d0ea68308e3c51a6ba9551b393bb2f639afc4) (cherry picked from commit 9cf44c2ed09a8b2ff243eb6dbb72a8cceae1b5ff) (cherry picked from commit 2a2a6aa7f51352fc481e78f6ad9d41f2738bcc48) (cherry picked from commit ce4ffb8183af3fa2bb5133f0f7370a88e064c516) Original Review URL: https://codereview.chromium.org/1297723002 . R=thestig@chromium.org Review URL: https://codereview.chromium.org/1301793002 . --- fpdfsdk/src/javascript/global.cpp | 136 +++++++++++++++----------------------- 1 file changed, 55 insertions(+), 81 deletions(-) (limited to 'fpdfsdk/src/javascript') diff --git a/fpdfsdk/src/javascript/global.cpp b/fpdfsdk/src/javascript/global.cpp index f03c4d1f41..dea2b5852c 100644 --- a/fpdfsdk/src/javascript/global.cpp +++ b/fpdfsdk/src/javascript/global.cpp @@ -127,15 +127,12 @@ FX_BOOL JSGlobalAlternate::QueryProperty(const FX_WCHAR* propname) { FX_BOOL JSGlobalAlternate::DelProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CFX_WideString& sError) { - JSGlobalData* pData = NULL; - CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname); - - if (m_mapGlobal.Lookup(sPropName, (void*&)pData)) { - pData->bDeleted = TRUE; - return TRUE; - } + auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname)); + if (it == m_mapGlobal.end()) + return FALSE; - return FALSE; + it->second->bDeleted = TRUE; + return TRUE; } FX_BOOL JSGlobalAlternate::DoProperty(IFXJS_Context* cc, @@ -181,19 +178,16 @@ FX_BOOL JSGlobalAlternate::DoProperty(IFXJS_Context* cc, break; } } else { - void* pVoid = nullptr; - if (!m_mapGlobal.Lookup(CFX_ByteString::FromUnicode(propname), pVoid)) { + auto it = m_mapGlobal.find(CFX_ByteString::FromUnicode(propname)); + if (it == m_mapGlobal.end()) { vp.SetNull(); return TRUE; } - if (!pVoid) { + JSGlobalData* pData = it->second; + if (pData->bDeleted) { vp.SetNull(); return TRUE; } - JSGlobalData* pData = (JSGlobalData*)pVoid; - if (pData->bDeleted) - return TRUE; - switch (pData->nType) { case JS_GLOBALDATA_TYPE_NUMBER: vp << pData->dData; @@ -230,11 +224,10 @@ FX_BOOL JSGlobalAlternate::setPersistent(IFXJS_Context* cc, return FALSE; } - CFX_ByteString sName = params[0].ToCFXByteString(); - - JSGlobalData* pData = NULL; - if (m_mapGlobal.Lookup(sName, (void*&)pData)) { - if (pData && !pData->bDeleted) { + auto it = m_mapGlobal.find(params[0].ToCFXByteString()); + if (it != m_mapGlobal.end()) { + JSGlobalData* pData = it->second; + if (!pData->bDeleted) { pData->bPersistent = params[1].ToBool(); return TRUE; } @@ -300,52 +293,42 @@ void JSGlobalAlternate::UpdateGlobalPersistentVariables() { } void JSGlobalAlternate::CommitGlobalPersisitentVariables() { - ASSERT(m_pGlobalData != NULL); - - FX_POSITION pos = m_mapGlobal.GetStartPosition(); - while (pos) { - CFX_ByteString name; - JSGlobalData* pData = NULL; - m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); - - if (pData) { - if (pData->bDeleted) { - m_pGlobalData->DeleteGlobalVariable(name); - } else { - switch (pData->nType) { - case JS_GLOBALDATA_TYPE_NUMBER: - m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); + ASSERT(m_pGlobalData); + for (auto it = m_mapGlobal.begin(); it != m_mapGlobal.end(); ++it) { + CFX_ByteString name = it->first; + JSGlobalData* pData = it->second; + if (pData->bDeleted) { + m_pGlobalData->DeleteGlobalVariable(name); + } else { + switch (pData->nType) { + case JS_GLOBALDATA_TYPE_NUMBER: + m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); + m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); + break; + case JS_GLOBALDATA_TYPE_BOOLEAN: + m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); + m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); + break; + case JS_GLOBALDATA_TYPE_STRING: + m_pGlobalData->SetGlobalVariableString(name, pData->sData); + m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); + break; + case JS_GLOBALDATA_TYPE_OBJECT: + // if (pData->pData) + { + CJS_GlobalVariableArray array; + v8::Local obj = v8::Local::New( + GetJSObject()->GetIsolate(), pData->pData); + ObjectToArray(obj, array); + m_pGlobalData->SetGlobalVariableObject(name, array); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); - break; - case JS_GLOBALDATA_TYPE_BOOLEAN: - m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); - m_pGlobalData->SetGlobalVariablePersistent(name, - pData->bPersistent); - break; - case JS_GLOBALDATA_TYPE_STRING: - m_pGlobalData->SetGlobalVariableString(name, pData->sData); - m_pGlobalData->SetGlobalVariablePersistent(name, - pData->bPersistent); - break; - case JS_GLOBALDATA_TYPE_OBJECT: - // if (pData->pData) - { - CJS_GlobalVariableArray array; - v8::Local obj = v8::Local::New( - GetJSObject()->GetIsolate(), pData->pData); - ObjectToArray(obj, array); - m_pGlobalData->SetGlobalVariableObject(name, array); - m_pGlobalData->SetGlobalVariablePersistent(name, - pData->bPersistent); - } - break; - case JS_GLOBALDATA_TYPE_NULL: - m_pGlobalData->SetGlobalVariableNull(name); - m_pGlobalData->SetGlobalVariablePersistent(name, - pData->bPersistent); - break; - } + } + break; + case JS_GLOBALDATA_TYPE_NULL: + m_pGlobalData->SetGlobalVariableNull(name); + m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); + break; } } } @@ -449,15 +432,10 @@ void JSGlobalAlternate::PutObjectProperty(v8::Local pObj, } void JSGlobalAlternate::DestroyGlobalPersisitentVariables() { - FX_POSITION pos = m_mapGlobal.GetStartPosition(); - while (pos) { - CFX_ByteString name; - JSGlobalData* pData = NULL; - m_mapGlobal.GetNextAssoc(pos, name, (void*&)pData); - delete pData; + for (const auto& pair : m_mapGlobal) { + delete pair.second; } - - m_mapGlobal.RemoveAll(); + m_mapGlobal.clear(); } FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname, @@ -467,13 +445,12 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent) { - if (propname == NULL) + if (!propname) return FALSE; - JSGlobalData* pTemp = NULL; - m_mapGlobal.Lookup(propname, (void*&)pTemp); - - if (pTemp) { + auto it = m_mapGlobal.find(propname); + if (it != m_mapGlobal.end()) { + JSGlobalData* pTemp = it->second; if (pTemp->bDeleted || pTemp->nType != nType) { pTemp->dData = 0; pTemp->bData = 0; @@ -482,7 +459,6 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname, } pTemp->bDeleted = FALSE; - switch (nType) { case JS_GLOBALDATA_TYPE_NUMBER: { pTemp->dData = dData; @@ -501,7 +477,6 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname, default: return FALSE; } - return TRUE; } @@ -541,8 +516,7 @@ FX_BOOL JSGlobalAlternate::SetGlobalVariables(const FX_CHAR* propname, return FALSE; } - m_mapGlobal.SetAt(propname, (void*)pNewData); - + m_mapGlobal[propname] = pNewData; return TRUE; } -- cgit v1.2.3