From e5fbd7a170257b455f6ea8c94f71e827e6c3bb8d Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Fri, 29 Jan 2016 17:05:08 -0800 Subject: Merge to XFA: Fix botched "CC:" parameter passing in JS_DocmailForm(). Original Review URL: https://codereview.chromium.org/1645413002 . (cherry picked from commit 6902db5cbaf0afb8f2cb4df325e1a4e7d6acd53f) TBR=thestig@chromium.org Review URL: https://codereview.chromium.org/1648793006 . --- fpdfsdk/src/fsdk_mgr.cpp | 4 +-- fpdfsdk/src/javascript/app.cpp | 81 +++++++++++++++++------------------------- 2 files changed, 34 insertions(+), 51 deletions(-) (limited to 'fpdfsdk') diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp index 76e0d2de20..cd494b2ed1 100644 --- a/fpdfsdk/src/fsdk_mgr.cpp +++ b/fpdfsdk/src/fsdk_mgr.cpp @@ -344,9 +344,9 @@ void CPDFDoc_Environment::JS_docmailForm(void* mailData, const FX_WCHAR* Msg) { if (m_pInfo && m_pInfo->m_pJsPlatform && m_pInfo->m_pJsPlatform->Doc_mail) { CFX_ByteString bsTo = CFX_WideString(To).UTF16LE_Encode(); - CFX_ByteString bsCC = CFX_WideString(Subject).UTF16LE_Encode(); - CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode(); CFX_ByteString bsSubject = CFX_WideString(Subject).UTF16LE_Encode(); + CFX_ByteString bsCC = CFX_WideString(CC).UTF16LE_Encode(); + CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode(); CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode(); FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength()); FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength()); diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp index 692873e0f9..057bf7ea58 100644 --- a/fpdfsdk/src/javascript/app.cpp +++ b/fpdfsdk/src/javascript/app.cpp @@ -567,67 +567,51 @@ FX_BOOL app::mailMsg(IJS_Context* cc, const std::vector& params, CJS_Value& vRet, CFX_WideString& sError) { - if (params.size() < 1) - return FALSE; - - FX_BOOL bUI = TRUE; - CFX_WideString cTo = L""; - CFX_WideString cCc = L""; - CFX_WideString cBcc = L""; - CFX_WideString cSubject = L""; - CFX_WideString cMsg = L""; - CJS_Context* pContext = static_cast(cc); CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - v8::Isolate* isolate = pRuntime->GetIsolate(); - - if (params[0].GetType() == CJS_Value::VT_object) { - v8::Local pObj = params[0].ToV8Object(); - - v8::Local pValue = FXJS_GetObjectElement(isolate, pObj, L"bUI"); - bUI = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToBool(); + std::vector newParams = + JS_ExpandKeywordParams(pRuntime, params, 6, L"bUI", L"cTo", L"cCc", + L"cBcc", L"cSubject", L"cMsg"); - pValue = FXJS_GetObjectElement(isolate, pObj, L"cTo"); - cTo = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + if (newParams[0].GetType() == CJS_Value::VT_unknown) { + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + bool bUI = newParams[0].ToBool(); - pValue = FXJS_GetObjectElement(isolate, pObj, L"cCc"); - cCc = CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + CFX_WideString cTo; + if (newParams[1].GetType() != CJS_Value::VT_unknown) { + cTo = newParams[1].ToCFXWideString(); + } else { + if (!bUI) { + // cTo parameter required when UI not invoked. + sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR); + return FALSE; + } + } - pValue = FXJS_GetObjectElement(isolate, pObj, L"cBcc"); - cBcc = - CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + CFX_WideString cCc; + if (newParams[2].GetType() != CJS_Value::VT_unknown) + cCc = newParams[2].ToCFXWideString(); - pValue = FXJS_GetObjectElement(isolate, pObj, L"cSubject"); - cSubject = - CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); + CFX_WideString cBcc; + if (newParams[3].GetType() != CJS_Value::VT_unknown) + cBcc = newParams[3].ToCFXWideString(); - pValue = FXJS_GetObjectElement(isolate, pObj, L"cMsg"); - cMsg = - CJS_Value(pRuntime, pValue, GET_VALUE_TYPE(pValue)).ToCFXWideString(); - } else { - if (params.size() < 2) - return FALSE; + CFX_WideString cSubject; + if (newParams[4].GetType() != CJS_Value::VT_unknown) + cSubject = newParams[4].ToCFXWideString(); - bUI = params[0].ToBool(); - cTo = params[1].ToCFXWideString(); - - if (params.size() >= 3) - cCc = params[2].ToCFXWideString(); - if (params.size() >= 4) - cBcc = params[3].ToCFXWideString(); - if (params.size() >= 5) - cSubject = params[4].ToCFXWideString(); - if (params.size() >= 6) - cMsg = params[5].ToCFXWideString(); - } + CFX_WideString cMsg; + if (newParams[5].GetType() != CJS_Value::VT_unknown) + cMsg = newParams[5].ToCFXWideString(); pRuntime->BeginBlock(); - pContext->GetReaderApp()->JS_docmailForm(NULL, 0, bUI, cTo.c_str(), + pContext->GetReaderApp()->JS_docmailForm(nullptr, 0, bUI, cTo.c_str(), cSubject.c_str(), cCc.c_str(), cBcc.c_str(), cMsg.c_str()); pRuntime->EndBlock(); - - return FALSE; + return TRUE; } FX_BOOL app::launchURL(IJS_Context* cc, @@ -646,7 +630,6 @@ FX_BOOL app::runtimeHighlight(IJS_Context* cc, } else { vp << m_bRuntimeHighLight; } - return TRUE; } -- cgit v1.2.3