diff options
author | Tom Sepez <tsepez@chromium.org> | 2015-02-05 15:27:25 -0800 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2015-02-05 15:27:25 -0800 |
commit | c6ab1725213a487838cbe03cb08cb5cac4ad956a (patch) | |
tree | 9b736199673b73677054307794b62165c72f03f1 /fpdfsdk/src/javascript/app.cpp | |
parent | dbe2a8e6ac3d92edf640ed10a6d4a0e658bc35c5 (diff) | |
download | pdfium-c6ab1725213a487838cbe03cb08cb5cac4ad956a.tar.xz |
Kill off some dodgy JS callbacks
None of these are currently reachable because the IsSafeMode
method always returns true. This, in turn, will let us kill
off some file (as in fopen()) based parsing. That, in turn,
will let us kill of some more now-unreachable code.
In general, we don't want to have unsafe modes.
BUG=https://code.google.com/p/pdfium/issues/detail?id=116
R=jam@chromium.org
Review URL: https://codereview.chromium.org/883393007
Diffstat (limited to 'fpdfsdk/src/javascript/app.cpp')
-rw-r--r-- | fpdfsdk/src/javascript/app.cpp | 323 |
1 files changed, 84 insertions, 239 deletions
diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp index 7cf2663d25..e3604b09cb 100644 --- a/fpdfsdk/src/javascript/app.cpp +++ b/fpdfsdk/src/javascript/app.cpp @@ -1,7 +1,7 @@ // Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - + // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include "../../include/javascript/JavaScript.h" @@ -45,7 +45,7 @@ TimerObj::TimerObj(CJS_Object* pJSObject) : CJS_EmbedObj(pJSObject), m_pTimer(NULL) { - + } TimerObj::~TimerObj() @@ -90,7 +90,7 @@ BEGIN_JS_STATIC_PROP(CJS_App) JS_STATIC_PROP_ENTRY(runtimeHighlight) JS_STATIC_PROP_ENTRY(viewerType) JS_STATIC_PROP_ENTRY(viewerVariation) - JS_STATIC_PROP_ENTRY(viewerVersion) + JS_STATIC_PROP_ENTRY(viewerVersion) END_JS_STATIC_PROP() BEGIN_JS_STATIC_METHOD(CJS_App) @@ -105,7 +105,7 @@ BEGIN_JS_STATIC_METHOD(CJS_App) JS_STATIC_METHOD_ENTRY(goBack, 0) JS_STATIC_METHOD_ENTRY(goForward, 0) JS_STATIC_METHOD_ENTRY(launchURL, 0) - JS_STATIC_METHOD_ENTRY(mailMsg, 0) + JS_STATIC_METHOD_ENTRY(mailMsg, 0) JS_STATIC_METHOD_ENTRY(newFDF, 0) JS_STATIC_METHOD_ENTRY(newDoc, 0) JS_STATIC_METHOD_ENTRY(openDoc, 0) @@ -141,29 +141,29 @@ FX_BOOL app::activeDocs(OBJ_PROP_PARAMS) CJS_Context* pContext = (CJS_Context *)cc; ASSERT(pContext != NULL); - + CPDFDoc_Environment* pApp = pContext->GetReaderApp(); ASSERT(pApp != NULL); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); ASSERT(pRuntime != NULL); - + CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); - + CJS_Array aDocs(pRuntime->GetIsolate()); // int iNumDocs = pApp->CountDocuments(); - + // for(int iIndex = 0; iIndex<iNumDocs; iIndex++) // { CPDFSDK_Document* pDoc = pApp->GetCurrentDoc(); if (pDoc) { CJS_Document * pJSDocument = NULL; - + if (pDoc == pCurDoc) { JSFXObject pObj = JS_GetThisObj(*pRuntime); - + if (JS_GetObjDefnID(pObj) == JS_GetObjDefnID(*pRuntime, L"Document")) { pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj); @@ -174,15 +174,15 @@ FX_BOOL app::activeDocs(OBJ_PROP_PARAMS) JSFXObject pObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime,L"Document")); pJSDocument = (CJS_Document*)JS_GetPrivate(pRuntime->GetIsolate(),pObj); ASSERT(pJSDocument != NULL); - - + + // pDocument->AttachDoc(pDoc); } - + aDocs.SetElement(0,CJS_Value(pRuntime->GetIsolate(),pJSDocument)); } // } - + if (aDocs.GetLength() > 0) vp << aDocs; else @@ -202,16 +202,16 @@ FX_BOOL app::calculate(OBJ_PROP_PARAMS) CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); - + CPDFDoc_Environment* pApp = pContext->GetReaderApp(); ASSERT(pApp != NULL); - + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); ASSERT(pRuntime != NULL); CJS_Array aDocs(pRuntime->GetIsolate()); // int iNumDocs = pApp->CountDocuments(); -// +// // for (int iIndex = 0;iIndex < iNumDocs; iIndex++) // { if (CPDFSDK_Document* pDoc = pApp->GetCurrentDoc()) @@ -219,14 +219,14 @@ FX_BOOL app::calculate(OBJ_PROP_PARAMS) CPDFSDK_InterForm* pInterForm = (CPDFSDK_InterForm*)pDoc->GetInterForm(); ASSERT(pInterForm != NULL); pInterForm->EnableCalculate((FX_BOOL)m_bCalculate); - } + } // } } else { vp << (bool)m_bCalculate; } - + return TRUE; } @@ -237,30 +237,18 @@ FX_BOOL app::formsVersion(OBJ_PROP_PARAMS) vp << JS_NUM_FORMSVERSION; return TRUE; } - + return FALSE; } FX_BOOL app::viewerType(OBJ_PROP_PARAMS) { - - - - - - if (vp.IsGetting()) { -// if (pApp->GetAppName() == PHANTOM) -// vp << JS_STR_VIEWERTYPE_STANDARD; -// else -// vp << JS_STR_VIEWERTYPE_READER; vp << L"unknown"; - - //vp << pApp->GetAppTitle(); return TRUE; } - + return FALSE; } @@ -271,7 +259,7 @@ FX_BOOL app::viewerVariation(OBJ_PROP_PARAMS) vp << JS_STR_VIEWERVARIATION; return TRUE; } - + return FALSE; } @@ -281,10 +269,10 @@ FX_BOOL app::viewerVersion(OBJ_PROP_PARAMS) { CJS_Context* pContext = (CJS_Context *)cc; ASSERT(pContext != NULL); - + CPDFDoc_Environment* pApp = pContext->GetReaderApp(); ASSERT(pApp != NULL); - + CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); CPDFXFA_Document* pDoc = pCurDoc->GetDocument(); @@ -294,7 +282,7 @@ FX_BOOL app::viewerVersion(OBJ_PROP_PARAMS) vp << JS_STR_VIEWERVERSION; return TRUE; } - + return FALSE; } @@ -305,7 +293,7 @@ FX_BOOL app::platform(OBJ_PROP_PARAMS) vp << JS_STR_PLATFORM; return TRUE; } - + return FALSE; } @@ -316,7 +304,7 @@ FX_BOOL app::language(OBJ_PROP_PARAMS) vp << JS_STR_LANGUANGE; return TRUE; } - + return FALSE; } @@ -438,7 +426,7 @@ FX_BOOL app::alert(OBJ_METHOD_PARAMS) swMsg = params[0]; } swTitle = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSALERT); - + for(int i = 1;i<iSize;i++) { if (i == 1) @@ -446,7 +434,7 @@ FX_BOOL app::alert(OBJ_METHOD_PARAMS) if (i == 2) iType = int(params[i]); if (i == 3) - swTitle = params[i]; + swTitle = params[i]; } } @@ -458,7 +446,7 @@ FX_BOOL app::alert(OBJ_METHOD_PARAMS) pRuntime->BeginBlock(); vRet = MsgBox(pRuntime->GetReaderApp(), JSGetPageView(cc),swMsg,swTitle,iType,iIcon); pRuntime->EndBlock(); - + return TRUE; } @@ -487,7 +475,7 @@ FX_BOOL app::findComponent(OBJ_METHOD_PARAMS) } FX_BOOL app::popUpMenuEx(OBJ_METHOD_PARAMS) -{ +{ return FALSE; } @@ -498,26 +486,26 @@ FX_BOOL app::fs(OBJ_PROP_PARAMS) FX_BOOL app::setInterval(OBJ_METHOD_PARAMS) { - if (params.size() > 2 || params.size() == 0) + if (params.size() > 2 || params.size() == 0) { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); return FALSE; } - + CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); ASSERT(pRuntime != NULL); CFX_WideString script = params.size() > 0 ? (FX_LPCWSTR)(params[0].operator CFX_WideString()) : L""; - if (script.IsEmpty()) + if (script.IsEmpty()) { sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE); return TRUE; } FX_DWORD dwInterval = params.size() > 1 ? (int)params[1] : 1000; - + CPDFDoc_Environment* pApp = pRuntime->GetReaderApp(); ASSERT(pApp); CJS_Timer* pTimer = new CJS_Timer(this, pApp); @@ -529,19 +517,19 @@ FX_BOOL app::setInterval(OBJ_METHOD_PARAMS) pTimer->SetTimeOut(0); // pTimer->SetStartTime(GetTickCount()); pTimer->SetJSTimer(dwInterval); - + JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj")); - + CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj); ASSERT(pJS_TimerObj != NULL); - + TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject(); ASSERT(pTimerObj != NULL); - - pTimerObj->SetTimer(pTimer); - + + pTimerObj->SetTimer(pTimer); + vRet = pRetObj; - + return TRUE; } @@ -549,29 +537,29 @@ FX_BOOL app::setTimeOut(OBJ_METHOD_PARAMS) { if (params.size() > 2 || params.size() == 0) { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); return FALSE; } - + CJS_Context* pContext = (CJS_Context*)cc; ASSERT(pContext != NULL); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); ASSERT(pRuntime != NULL); - + CFX_WideString script = params.size() > 0 ? (FX_LPCWSTR)(params[0].operator CFX_WideString()) : L""; - if (script.IsEmpty()) + if (script.IsEmpty()) { sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE); return TRUE; } - + FX_DWORD dwTimeOut = params.size() > 1 ? (int)params[1] : 1000; - + CPDFDoc_Environment* pApp = pRuntime->GetReaderApp(); ASSERT(pApp); CJS_Timer* pTimer = new CJS_Timer(this, pApp); m_aTimer.Add(pTimer); - + pTimer->SetType(1); pTimer->SetRuntime(pRuntime); pTimer->SetJScript(script); @@ -579,20 +567,20 @@ FX_BOOL app::setTimeOut(OBJ_METHOD_PARAMS) // pTimer->SetStartTime(GetTickCount()); // pTimer->SetJSTimer(1000); pTimer->SetJSTimer(dwTimeOut); - + JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, JS_GetObjDefnID(*pRuntime, L"TimerObj")); // ASSERT(pRetObj != NULL); - + CJS_TimerObj* pJS_TimerObj = (CJS_TimerObj*)JS_GetPrivate(pRuntime->GetIsolate(),pRetObj); ASSERT(pJS_TimerObj != NULL); - + TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject(); ASSERT(pTimerObj != NULL); - - pTimerObj->SetTimer(pTimer); - + + pTimerObj->SetTimer(pTimer); + vRet = pRetObj; - + return TRUE; } @@ -602,13 +590,13 @@ FX_BOOL app::clearTimeOut(OBJ_METHOD_PARAMS) ASSERT(pContext != NULL); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); ASSERT(pRuntime != NULL); - + if (params.size() != 1) { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); return FALSE; } - + if (params[0].GetType() == VT_fxobject) { JSFXObject pObj = (JSFXObject)params[0]; @@ -622,7 +610,7 @@ FX_BOOL app::clearTimeOut(OBJ_METHOD_PARAMS) if (CJS_Timer* pTimer = pTimerObj->GetTimer()) { pTimer->KillJSTimer(); - + for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++) { if (m_aTimer[i] == pTimer) @@ -631,7 +619,7 @@ FX_BOOL app::clearTimeOut(OBJ_METHOD_PARAMS) break; } } - + delete pTimer; pTimerObj->SetTimer(NULL); } @@ -640,7 +628,7 @@ FX_BOOL app::clearTimeOut(OBJ_METHOD_PARAMS) } } } - + return TRUE; } @@ -653,10 +641,10 @@ FX_BOOL app::clearInterval(OBJ_METHOD_PARAMS) if (params.size() != 1) { - sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); + sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR); return FALSE; } - + if (params[0].GetType() == VT_fxobject) { JSFXObject pObj = (JSFXObject)params[0]; @@ -670,7 +658,7 @@ FX_BOOL app::clearInterval(OBJ_METHOD_PARAMS) if (CJS_Timer* pTimer = pTimerObj->GetTimer()) { pTimer->KillJSTimer(); - + for (int i=0,sz=m_aTimer.GetSize(); i<sz; i++) { if (m_aTimer[i] == pTimer) @@ -679,7 +667,7 @@ FX_BOOL app::clearInterval(OBJ_METHOD_PARAMS) break; } } - + delete pTimer; pTimerObj->SetTimer(NULL); } @@ -688,12 +676,12 @@ FX_BOOL app::clearInterval(OBJ_METHOD_PARAMS) } } } - + return TRUE; } FX_BOOL app::execMenuItem(OBJ_METHOD_PARAMS) -{ +{ return FALSE; } @@ -714,7 +702,7 @@ void app::TimerProc(CJS_Timer* pTimer) } break; } - + } void app::RunJsScript(CJS_Runtime* pRuntime,const CFX_WideString& wsScript) @@ -734,24 +722,14 @@ void app::RunJsScript(CJS_Runtime* pRuntime,const CFX_WideString& wsScript) FX_BOOL app::goBack(OBJ_METHOD_PARAMS) { - - - - - - - return TRUE; + // Not supported. + return TRUE; } FX_BOOL app::goForward(OBJ_METHOD_PARAMS) -{ - - - - - - - return TRUE; +{ + // Not supported. + return TRUE; } FX_BOOL app::mailMsg(OBJ_METHOD_PARAMS) @@ -775,7 +753,7 @@ FX_BOOL app::mailMsg(OBJ_METHOD_PARAMS) cCc = params.size()>=3?(const wchar_t*)(FX_LPCWSTR)params[2].operator CFX_WideString():L""; cBcc = params.size()>=4?(const wchar_t*)(FX_LPCWSTR)params[3].operator CFX_WideString():L""; cSubject = params.size()>=5?(const wchar_t*)(FX_LPCWSTR)params[4].operator CFX_WideString():L""; - cMsg = params.size()>=6?(const wchar_t*)(FX_LPCWSTR)params[5].operator CFX_WideString():L""; + cMsg = params.size()>=6?(const wchar_t*)(FX_LPCWSTR)params[5].operator CFX_WideString():L""; if (params[0].GetType() == VT_object) @@ -800,8 +778,8 @@ FX_BOOL app::mailMsg(OBJ_METHOD_PARAMS) pValue = JS_GetObjectElement(isolate,pObj, L"cMsg"); cMsg = CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)).operator CFX_WideString(); } - - + + CJS_Runtime* pRuntime = pContext->GetJSRuntime(); ASSERT(pRuntime != NULL); @@ -820,25 +798,8 @@ FX_BOOL app::mailMsg(OBJ_METHOD_PARAMS) FX_BOOL app::launchURL(OBJ_METHOD_PARAMS) { - if (IsSafeMode(cc)) return TRUE; - - CJS_Context* pContext = (CJS_Context*)cc; - ASSERT(pContext != NULL); - - - - - CFX_WideString swURL = params[0].operator CFX_WideString(); - - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - pRuntime->BeginBlock(); -// FX_BOOL bRet = pApp->OpenURL(swURL); - pRuntime->EndBlock(); - -// return bRet; - return FALSE; + // Unsafe, not supported. + return TRUE; } FX_BOOL app::runtimeHighlight(OBJ_PROP_PARAMS) @@ -868,90 +829,14 @@ FX_BOOL app::popUpMenu(OBJ_METHOD_PARAMS) FX_BOOL app::browseForDoc(OBJ_METHOD_PARAMS) { - //This method may trigger a "file save" dialog,while enable user to save contents of the document. - //Such action is considered to be unsafe. - if (IsSafeMode(cc)) return TRUE; - - v8::Isolate* isolate = GetIsolate(cc); - - bool bSave = false; - CFX_ByteString cFilenameInit = CFX_ByteString(); - CFX_ByteString cFSInit = CFX_ByteString(); - - if(params.size()>0 && (params[0].GetType() == VT_object)) - { - JSObject pObj = (JSObject )params[0]; - - v8::Handle<v8::Value> pValue = JS_GetObjectElement(isolate,pObj,L"bSave"); - bSave = (bool)CJS_Value(isolate,pValue,GET_VALUE_TYPE(pValue)); - - pValue = JS_GetObjectElement(isolate, pObj,L"cFilenameInit"); - { - CJS_Value t = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)); - cFilenameInit = t.operator CFX_ByteString(); - } - - pValue = JS_GetObjectElement(isolate,pObj,L"cFSInit"); - { - CJS_Value t = CJS_Value(isolate, pValue, GET_VALUE_TYPE(pValue)); - cFSInit = t.operator CFX_ByteString(); - } - } - else - { - if(params.size() >= 1) - { - bSave = (bool)params[0]; - } - if(params.size() >= 2) - { - CJS_Value t = params[1]; - cFilenameInit = t.operator CFX_ByteString(); - } - if(params.size() >= 3) - { - CJS_Value t = params[2]; - cFSInit = t.operator CFX_ByteString(); - } - } - CJS_Context* pContext = (CJS_Context *)cc; - ASSERT(pContext != NULL); - - CPDFDoc_Environment* pApp = pContext->GetReaderApp(); - ASSERT(pApp != NULL); - - CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime != NULL); - - CFX_WideString wsFileNameInit = CFX_WideString::FromLocal(cFilenameInit); - CFX_WideString wsFSInit = CFX_WideString::FromLocal(cFSInit); - CFX_WideString wsFilePath = pApp->JS_appbrowseForDoc(bSave, wsFileNameInit); - if(wsFilePath.IsEmpty()) - return FALSE; - - JSFXObject pRetObj = JS_NewFxDynamicObj(*pRuntime, pContext, -1); - - JS_PutObjectString(isolate,pRetObj, L"cPath", SysPathToPDFPath(wsFilePath)); - JS_PutObjectString(isolate,pRetObj, L"cURL", SysPathToPDFPath(wsFilePath)); - - if (!cFSInit.IsEmpty()) - { - JS_PutObjectString(isolate,pRetObj, L"cFS", CFX_WideString::FromLocal(cFSInit.GetBuffer(cFSInit.GetLength()))); - } - else - { - JS_PutObjectString(isolate,pRetObj, L"cFS", CFX_WideString::FromLocal("DOS")); - } - - vRet = pRetObj; - - return TRUE; + // Unsafe, not supported. + return TRUE; } CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath) { CFX_WideString sRet = L"/"; - + for (int i=0,sz=sOldPath.GetLength(); i<sz; i++) { wchar_t c = sOldPath.GetAt(i); @@ -970,47 +855,8 @@ CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath) } } } - - return sRet; -} - -CFX_WideString app::PDFPathToSysPath(const CFX_WideString& sOldPath) -{ - //strLPath = "D:\temporay.fdf"; - CFX_WideString strOPath = sOldPath; - strOPath.TrimLeft(); - strOPath.TrimRight(); - - if (strOPath.GetAt(0) == L'/' && strOPath.GetAt(2) == L'/') - { - wchar_t c_Drive = strOPath.GetAt(1); - if ((c_Drive >= L'a' && c_Drive <= L'z' )||( c_Drive >= L'A' && c_Drive <= L'Z')) - { - strOPath.Replace(L"/",L"\\"); - //strOPath.SetAt(0,''); - strOPath.Insert(2,':'); - strOPath.Delete(0); - } - } - - return strOPath; -} -CFX_WideString app::RelativePathToSysPath(const CFX_WideString& sOldPath, const CFX_WideString& sFilePath) -{ -// if (!PathIsRelative(sOldPath)) return sOldPath; - - int nSplit = 0; - for (int i=sFilePath.GetLength()-1; i>=0; i--) - { - if (sFilePath[i] == '\\' || sFilePath[i] == '/') - { - nSplit = i; - break; - } - } - - return sFilePath.Left(nSplit+1) + sOldPath; + return sRet; } FX_BOOL app::newDoc(OBJ_METHOD_PARAMS) @@ -1112,4 +958,3 @@ FX_BOOL app::execDialog(OBJ_METHOD_PARAMS) { return TRUE; } - |